作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望输出是这样的:
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/
我有以下数字数组: var array = [5,9,12,19,23,24,31,44,49,62]; 我试图找出每一个是偶数和合数,奇数和合数,还是奇数和素数。我首先尝试找到偶数和合数: for
我是一名优秀的程序员,十分优秀!