1条回答 默认 最新
- 千万469 2022-10-10 05:18关注
因为你输出 j 的语句是在最内层循环,输出j的前提条件不够严谨。先捋一下你的思路吧,外层循环逐一寻找2—n内的质数,内层循环判断j是否为质数(是否能被1和j本身以外的数整除),当判断出j为质数时输出j的值并质数数量d累加,最后输出d的值(PS:思路很好,尤其是用ii<=j判断做除数界限以及用j%i这种取余的方法判断能否被整除的方法,很厉害,非常有程序员的潜质)。以下是我的看法:
1、既然是找2—n内的质数,那么第5行j的初始化应该为2更严谨;
2、因为第7行的判断语句是在第二个for循环(内层循环)内的,内层的每次循环只要j不能对i整除就输出一次j,这个逻辑是错误的,这也是运行结果有很多重复数字的原因。i不能被j整除只能说明当前i的值不能作为j的因数,正确的逻辑应该是:用变量a计量j的因数,每次进入内层循环时将a清零,i从2开始累加,每次i能被整除就计j的因数+1,当内层循环结束后判断j的因数是否有除了1和他本身以外的因数,如果是则当前j的值不是质数,否则输出j的值,并令d+1。
3、第7行的判断条件里的“==”改成“!=”就可以不用后面的else了(“!=”是“不等于”的意思)。或者直接把“==0”去掉也可以,这样当j%i的值为零是则判为“否”,其它情值则判为“是”(“非零即真”)。
4、感觉输出的数据间隔太远啦。建议每个质数之间隔一个空格,最后要输出质数数量的时候再换行就好了(“\n”是换行的意思,连续两个就是连续换行两次)。
参考代码:
#include<studio.h>
int main(void)
{
int a,b=0,n,i,j;
scanf("%d",&n);
for(j=2;j<=n;j++)
{
for(a=0,i=2;ii<=j;i++)
if(j%i) a++;
if(a!=0) {peintf(" %d",j);b++;}
}
printf("\n%d",b);
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法