求助:欧拉计划第三题!!

hh4062703 2012-03-29 10:19:54
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

我的代码:
#include <stdio.h>
#define MAX 600851475143

int maxfactor (long long int);


int main (void)
{


printf("The bigest factor of max is:%d\n", maxfactor(MAX));

return 0;
}

int maxfactor (long long int n)
{
int factor = 2;

while (n > 1)
{

if (n % factor == 0)
{
n /= factor;

while(n % factor == 0)
{
n /= factor;
}
}
factor += (factor = 2?1:2);
if (factor * factor > n)
break;

}
return factor;
}


我的代码半天运行不出结果,请大家看看我的代码有什么问题,有什么可以优化的。谢谢!
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
c090869 2012-03-29
  • 打赏
  • 举报
回复
仅供参考。
int maxfactor(long long int n)
{
int factor=2,prime=1;
while(n>1)
{
while(n%factor==0)
{ n/=factor;prime=factor;}
if(factor*factor>0)
break;
factor+=(factor==2?1:2);
}
if(prime!=1&&n>prime)
prime=n;
return prime;
}
lisial 2012-03-29
  • 打赏
  • 举报
回复
n % factor 是等于1,所以不会运行if里的,而if外面又没有更新n值,所以一直循环出不来。
cao_julians 2012-03-29
  • 打赏
  • 举报
回复
#define MAX 600851475143
一般字面常量不加类型后缀是int类型,是不是溢出了

factor += (factor = 2?1:2);
factor = 2是赋值,不是比较。它的结果是逻辑“真”
Lynn_Iris 2012-03-29
  • 打赏
  • 举报
回复
你运行不出结果是因为这一句factor += (factor = 2?1:2);写错了

括号里面factor = 2死循环在这里了。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧