[英]Why my printf does not work?
问题是找到数字600851475143中的最大素数,我的代码是:
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
// printf("%f\n",x );
}
}
printf("%f\n",x );
return 0;
}
为什么我的printf函数不起作用? 当我将printf放在上面(在注释中显示)时,它可以工作,但是最后一个printf不起作用。 为什么?
我不认为printf
函数有问题,当您运行程序时,它不需要太多时间,因此上一次printf没有运行,您应该选择另一种更快的算法进行优化。
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++) // it needs too much time!
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++) // this algorithm is O(N^2)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%f\n",x );
}
}
printf("%f\n",x ); // needs too much time to go here
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
long double i,x, a, y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%Lf\n",x );
//break;
}
}
printf("%Lf\n",x );
return 0;
}
如果没有间断,它将在某个条件下找到一个数字,但将返回for并继续寻找另一个。 因此,您需要休息一下才能找到第一个。 要查找更多信息,我建议使用“ long double”数据类型。
这是一种实数浮点类型,通常映射为扩展精度浮点数格式。 未指定实际属性。 与float和double类型不同,如果提供了更高的精度格式,则可以是80位浮点格式,也可以是非IEEE“ double-double”或IEEE 754四精度浮点格式,否则与双。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.