c - 打印合数的最大质因数

标签 c primes

我希望输出是这样的:

6857
1471
839
71

但我得到的数字甚至不是 600851475143 的因数。

这段代码有什么问题?

输出应该都是素数,并且它们的乘积必须等于 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;
        }
    }
}

最佳答案

您要查找的因数超出了 long 可以容纳的值范围。 Here you can see maximum size of values that data type in c can store另外,我建议在所有要存储的数字源自 num 的地方使用 long long ,即在程序中的任何地方。确保不要更改数据类型除非您确定它不会超过其最大限制。 另外,你如何使用

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

在 C 代码中?这就是 C++ 功能。 另外,不需要

#include <time.h>

所以你的代码应该是这样的:

#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;
}

希望有帮助。

关于c - 打印合数的最大质因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619543/

相关文章:

algorithm - 研究人员如何找到如此大的素数?

c - C 中的内存分配跟踪——我这样做对吗?

c - shell脚本中的后台进程收到EOF

c - C 中的二叉搜索树中的词频?

不使用 "."(点)与使用 "."(点)的 Scala 函数调用

algorithm - O(1)复杂度如何得到一个数对应的集合

c - C语言中如何使用strxfrm?

c - 我有以下 gcc 编译警告

java - 如何创建一个代码来告诉两个整数互质?

java - 根据循环返回向数组添加新对象