10000以内素数的问题
#include<stdio.h>#include<math.h>
int main()
{
int i;
int j;
int count;
for(i = 2;i <= 10000;i += 1)
{
int count1 = 0;
for(j = 2;j <= i;j += 1)
{
if(i % j == 0)
{
count1 += 1;
}
}
if(count1 == 1)
{
count += 1;
}
}
printf("10000以内共有%d个素数!\n",count);
return 0;
}
为啥这个程序跑出来的数是33995。是那一步出现的问题,我看了好几遍真是找不出来{:5_100:} 应该是 if(count1 == 0) 吧? 傻眼貓咪 发表于 2022-4-24 20:01
应该是 if(count1 == 0) 吧?
素数是只能被本身和1整除的才算,除了1,也就是只有自己一个数能被整除,所以是1,如果是0就是没有一个能被整除。不存在 小鲸鱼Rx 发表于 2022-4-24 20:04
素数是只能被本身和1整除的才算,除了1,也就是只有自己一个数能被整除,所以是1,如果是0就是没有一个能 ...
哈哈哈哈,你开心就好{:10_254:}{:10_254:}{:10_254:} 傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好
我开心啥呀我这明显不对呀,关键是哪里的问题呀 傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好
改成0是32765也不对{:5_100:} 傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好
哈哈,他count1在这是作一个标志,前面循环条件是 j <= i,必有一次和自身取余,所以得是为1才行。不得不说确实是有自己的想法哈哈 前面count定义的时候初始化一下,不然你在它定义之后先打印它的数值看看{:10_334:} 小鲸鱼Rx 发表于 2022-4-24 20:28
改成0是32765也不对
首先,你先看看你的代码中 if (i % j == 0) 表示如果除了自己和 1 之外,还有其它数可以除整对吗?然后你写了 count1 += 1; 这时 count1 已经不是 0 了对吗?那么下面如果要判断 i 是否是素数,是不是要先确认 count1 还是不是保持 0 的状态啊?(表示 count1 没有被改变过) 风车呼呼呼 发表于 2022-4-24 20:37
前面count定义的时候初始化一下,不然你在它定义之后先打印它的数值看看
就是这个{:5_110:},好了 #include <stdio.h>
int main()
{
int count = 0, isPrime;
for(int num = 0; num < 1e4; num++) {
isPrime = 1; // 命名时,尽量以自己最容易明白的名字命名!!!!
if(num < 2) continue;
else if(num == 2) {
count++;
}
else{
for(int n = 2; n < num; n++) {
if(num%n == 0){
isPrime = 0; // 如果出现除整,则不是素数
break; // 无需继续
}
}
if(isPrime) {
count++;
}
}
}
printf("%d", count);
return 0;
}1229 傻眼貓咪 发表于 2022-4-24 20:46
感谢 大哥我是个菜鸡,刚接触这东西,所以写的东西很不灵活,看你写的真是厉害很多{:5_106:}
页:
[1]