给定一个正整数N,找出N^2的小于N但不除N的正整数因数的数目。约束: 1<=N<=(10^12)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
float N;
scanf("%f",&N);
float nsq = N*N;
float i;
int count = 0;
for(i=1.0f; i<N; i=i+1.0f)
{
if(fmodf(nsq,i))
{
count++;
if(fmodf(N,i))
count--;
}
}
printf("%d", count);
return 0;
}发布于 2016-08-07 17:04:20
如果余数是零,那么对象是可除的,但If语句不会被接受,因为0.0f值被视为false。
您必须将函数fmodf与0的结果进行比较:
if(fmodf(nsq,i) == 0.0f)如果上一句不清楚,那么对第二个If语句也必须执行同样的操作。
还要注意,使用浮点进行迭代是错误的。对于小于10^12的大值,结果将不适合连续的整数,并且迭代将不再正确工作。
函数fmodf的结果也会出现类似的问题。在某一时刻,该函数将开始停止返回零,即使对于明显可除的运算符也是如此。
发布于 2016-08-07 18:02:23
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main()
{
float N;
scanf("%f",&N);
float nsq = N*N;
float i;
int count = 0;
for(i=1.0f; i<N; i=i+1.0f)
{
if(!fmodf(nsq,i))
{
// count++;
if(fmodf(N,i))
count++;
}
}
printf("%d", count);
return 0;
}https://stackoverflow.com/questions/38812515
复制相似问题