愷龍 发表于 2020-12-29 14:50:10

按照素数定义输出素数失败

按照素数的定义对每一个数和他之前的数进行取余,如果不为零就输出,为什么没有输出?{: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:14:13

本帖最后由 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 值元素,如果存在就不是,所以,否定素数可以在检查余数的循环中,而肯定素数必须得在检查余数的循环完成后才可以,这是楼主代码存在的主要问题之一。

愷龍 发表于 2020-12-29 19:02:00

jackz007 发表于 2020-12-29 17:14
已经按照你的思路改好

      判断素数要看在所有余数中,是否存在 0 值元素,如果存在就不是 ...

感谢,明白了
页: [1]
查看完整版本: 按照素数定义输出素数失败