gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:27:58 27 4
gpt4 key购买 nike

我希望输出是这样的:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com