C 打印复合数的最大素数因子

C 打印复合数的最大素数因子,c,primes,C,Primes,我希望输出如下: 6857 1471 839 71 但我得到的数字甚至不是600851475143的因子 #include <stdio.h> #include <math.h> #include <time.h> int temp; void fact(long a); int prime(int a); int main(){ fact(600851475143); } void fact(long num){ for(int i

我希望输出如下:

6857
1471
839
71
但我得到的数字甚至不是600851475143的因子

#include <stdio.h>
#include <math.h>
#include <time.h>

int temp;
void fact(long a);
int prime(int a);

int main(){ 
    fact(600851475143);
}

void fact(long num){
    for(int i=2; i<sqrt(600851475143); i++){
        if(num%i == 0){
            if(prime(i)){
                printf("%d\n", i);  
                temp=num/i;
                fact(temp);
            }   
        }
    }
}

int prime(int num){

    for(int i=2; i<num; i++){

        if(num % i == 0){
            break;
        }else{
            return i;
        }
    }
}
这个代码有什么问题

输出应该是所有素数,它们的乘积必须等于600851475143

#include <stdio.h>
#include <math.h>
#include <time.h>

int temp;
void fact(long a);
int prime(int a);

int main(){ 
    fact(600851475143);
}

void fact(long num){
    for(int i=2; i<sqrt(600851475143); i++){
        if(num%i == 0){
            if(prime(i)){
                printf("%d\n", i);  
                temp=num/i;
                fact(temp);
            }   
        }
    }
}

int prime(int num){

    for(int i=2; i<num; i++){

        if(num % i == 0){
            break;
        }else{
            return i;
        }
    }
}
#包括
#包括
#包括
内部温度;
无效事实(长a);
int素数(inta);
int main(){
事实(600851475143);
}
无效事实(长数值){

对于(int i=2;i您试图查找其因子的数字超出了long所能容纳的值范围。此外,我建议在要存储的数字从num派生的所有位置使用long,即在您的程序中的所有位置。确保不要更改数据类型,除非您确定它是不要超过它的最大限度。 还有,如何使用

for(int i=2; i<sqrt(600851475143); i++)

用于(int i=2;IC!=C++)。实际上只有使用标记。一些编译器可能需要后缀<代码> L>代码>如<代码> 600 85 1475 143L < /代码>。我认为<代码> Prime < /C>是不正确的。当代码> >破译>代码>时,不返回正常值。<代码>返回i;< /代码>太早判断。我也认为应该使用<代码>长长< /代码> i。n将
long
作为一个整体(包括数字文本)删除.在递归调用之后,您可能希望从函数返回。您尝试递归地执行此操作有什么原因吗?这会使思考变得更加困难,而且我看不到它有任何好处。它给出了输出:71 839 1471 6857 59569 104441 486847,但我只希望最多6857,这样产品(71*839*1471*6857)等于600851475143。@RhitikPokharel I修改代码。请查看。
#include <stdio.h>
#include <math.h>
//#include <time.h>

int temp;
void fact(long long a);
long long prime(long long a);

int main(){
    fact(600851475143);
}

void fact(long long num){
    long long i=2;
    for(; i<sqrt(600851475143); i++){
        if(num%i == 0){
            if(prime(i)){
                printf("%d\n", i);
            }
        }
    }
}

long long prime(long long num){
    long long i=2;
    int k = 1;
    for(; i<num; i++){
        if(num % i == 0){
            k=0;
            break;
        }
    }
    return k;
}