给予答案是永远的,似乎只是在处理答案?我见过类似的问题,但请告诉我这段代码有什么问题?
#include<stdio.h>
main()
{
int flag=0;
unsigned long long int j,z,ino,i;
scanf("%llu",&ino);
for(i=2;i<=ino/2;i++)
{
flag=0;
if(ino%i==0)
{
for(j=2;j<=i/2;j++)
{
if(i%j==0)
{
flag=1;
}
}
if(flag==0)
{
z=i;
}
}
}
printf("%llu",z);
}
问题在于:
13195的主要因素是5,7,13和29.最大的是什么 数字的主要因素600851475143?
答案 0 :(得分:0)
这不是代码错误,因为错误,错误是低效的。
让我们看看你的代码,它测试一个数字是否为素数:
for(j=2;j<=i/2;j++)
{
if(i%j==0)
{
flag=1;
}
}
如果你正在测试数字7919(这是素数)的主要部分,你的循环将运行近4,000次。
但你的病情会更强烈。如果你写了:
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=1;
}
}
那么你的素数测试仍然是正确的 - 但它只需要运行88次,这是一项巨大的改进。渐渐地,你已经从用于测试素数的线性(in n)算法变为在root n时间运行的算法 - 你可以更快地测试素数,但是你不必至少在前50个项目欧拉的问题。
我的这个项目的代码版本Euler问题远不是你的问题,除了素数检查(以及它在Java中),它运行在0.023631秒。