按照素数定义输出素数失败
按照素数的定义对每一个数和他之前的数进行取余,如果不为零就输出,为什么没有输出?{:10_243:}#include <stdio.h>
main()
{
int N,a=0,b,c=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
while(a<=i)
{
b=i%a;
a++;
c++;
}
for(a=0;a<i;a++)
{
if(b!=0)
printf("%d",i);
}
}
} 本帖最后由 jackz007 于 2020-12-29 17:32 编辑
已经按照你的思路改好
#include <stdio.h>
int main(void)
{
int N, a , b , c, i ;
scanf("%d" , & N) ;
for(i = 2 ; i < N + 1 ; i ++) {
a = 2 ; // 很有必要,对于每一个 i 都必须初始化
c = 0 ; // 很有必要,对于每一个 i 都必须初始化
while(a * a < i + 1) // 不必循环到 a = i,根据乘法交换律,只需要循环一半次数即可
{
b = i % a ;
a ++ ;
c ++ ;
}
for(a = 0 ; a < c ; a ++) // 一共产生了 c 个余数
{
if(b == 0) break; // 如果有余数为 0 值,说明 i 不是素数,中断循环
}
if(a == c) printf(" %d" , i) ; // 如果循环是正常结束的,说明没有找到 0 值余数,那 i 就是素数无疑
}
}
判断素数要看在所有余数中,是否存在 0 值元素,如果存在就不是,所以,否定素数可以在检查余数的循环中,而肯定素数必须得在检查余数的循环完成后才可以,这是楼主代码存在的主要问题之一。 jackz007 发表于 2020-12-29 17:14
已经按照你的思路改好
判断素数要看在所有余数中,是否存在 0 值元素,如果存在就不是 ...
感谢,明白了
页:
[1]