|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大佬,有人能帮忙解答一下吗?我这个程序在计数质数个数时出现了问题,计数应该用在哪里才对?
/*找出质数个数*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
int main()
{
int e,b,c,d,sum,n;
int flag=0,i,j,a[200];
srand((int)time(0));
for(i=0;i<200;i++){
a[i]=rand()%9000+1000;
e=a[i]/1000;
b=a[i]%1000/100;
c=a[i]%100/10;
d=a[i]%10;
sum=e+b+c+d;
n=(int)sqrt(sum);
for(j=2;j<n;j++){
if(sum%j!=0){
flag++;
}//计数处有问题
}
}
printf("%d\n",flag);
}
四个个位数相加得的数比较小,不必考虑负担而采用sqrt函数。
你用了后,你有没有考虑这四位数之和有可能等于2,3,4,5,……
如果采用开方,那么前两个是小于2的,你使用j=2开始并规定j<n才会有后面的计数判断
然而2和3它是素数,它们开方后均小于2,那么j大于它们,不符合j<n的条件,因此不会进行计数
对于4和5,由于n被你int了,因此,它们的n值是2,也不符合j<n的要求,也不会进行计数,这个要一直到n大于等于3时才会正常,也就是sum>=9时。
至于你说的flag超过200个,那是因为它在你的循环里面,对于sum进行取余j时,j在变化中,每变一次,发现符合条件就计数,这样,一个sum会被计算多次
假设其中一个四位数是9998,它的和是35,n为5,j会取值为2,3,4一共三次判断。当35%2时,会计一次数,因为!=0。当j为3时,因为!=0又会再计一次数!这样就重复了
|
|