|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
按照素数的定义对每一个数和他之前的数进行取余,如果不为零就输出,为什么没有输出?
- #include <stdio.h>
- main()
- {
- int N,a=0,b[N],c=0;
- scanf("%d",&N);
- for(int i=0;i<N;i++)
- {
- while(a<=i)
- {
- b[c]=i%a;
- a++;
- c++;
- }
-
- for(a=0;a<i;a++)
- {
- if(b[a]!=0)
- printf("%d",i);
- }
-
- }
- }
复制代码
本帖最后由 jackz007 于 2020-12-29 17:32 编辑
已经按照你的思路改好
- #include <stdio.h>
- int main(void)
- {
- int N , a , b[50000] , 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[c] = i % a ;
- a ++ ;
- c ++ ;
- }
- for(a = 0 ; a < c ; a ++) // 一共产生了 c 个余数
- {
- if(b[a] == 0) break ; // 如果有余数为 0 值,说明 i 不是素数,中断循环
- }
- if(a == c) printf(" %d" , i) ; // 如果循环是正常结束的,说明没有找到 0 值余数,那 i 就是素数无疑
- }
- }
复制代码
判断素数要看在所有余数中,是否存在 0 值元素,如果存在就不是,所以,否定素数可以在检查余数的循环中,而肯定素数必须得在检查余数的循环完成后才可以,这是楼主代码存在的主要问题之一。
|
|