给定正整数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;
}
答案 0 :(得分:0)
如果余数为零,则该对象可以被整除,但不会将if语句视为0.0f
值被视为false。
你必须比较函数fmodf的结果:0:
if(fmodf(nsq,i) == 0.0f)
如果从前一句中不清楚,那么第二句if语句也必须如此。
另请注意,使用浮点进行迭代是错误的。对于大于10 ^ 12的大值,结果将不适合连续的整数,迭代将不再正常工作。
函数fmodf的结果会出现类似的问题。在某些时候,即使对于明显可分割的运算符,函数也会开始停止返回零。
答案 1 :(得分:0)
#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;
}