朝歌兮、 发表于 2020-2-27 23:23:37

请教一下判断一个数是不是素数的代码

本帖最后由 朝歌兮、 于 2020-2-27 23:29 编辑

#define _CRT_SECURE_NO_WARNINGS   
#include <stdio.h>
int main(void)
{
        int x;
        scanf("%d", &x);
        int i;
        int y=1;//当y=1时,x为素数;
       
        for (i = 2; i < x; i++)
        {
                if (x%i==0)
                {
                        y = 0;
                        break;
                }
                else
                {
                        y = 1;
                }
        }
        if (y==1)
        {
                printf("%d是素数",x);
        }
        else
        {
                printf("%d不是素数", x);
        }
        return 0;
}
第一个else是不是多余的?

jackz007 发表于 2020-2-27 23:57:34

本帖最后由 jackz007 于 2020-2-28 00:13 编辑

                else
                {
                        y = 1;
                }
      y 在被定义的时候已经被初始化为 1 ,整个循环过程中,y 的值本来就是 1,只有在 x % i == 0 成立的时候,才会被修改为 0,不过,修改完立即就 break 退出循环了。换句话说,修改 y 值一定是在 x 不是素数的时候。所以,这个 else 确实属于 "画蛇添足" 的存在,完全可以直接删除。
      下面的代码可以打印 1000 以内的所有素数
#include <stdio.h>
#include <math.h>

int main(void)
{
      int c , i , x , y                                                                     ;
      for(c = 0 , x = 2 ; x < 1001 ; x ++) {
                for(y = 1 , i = 2 ; i < sqrt(x) + 1 && y ; i ++) if(i < x && ! (x % i)) y = 0 ;
                if(y) {
                        if(c) printf("\t")                                                    ;
                        printf("%3d" , x)                                                   ;
                        c ++                                                                  ;
                }
      }
}
      编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
2       3       5       7      11      13      17      19      23      29
31      37      41      43      47      53      59      61      67      71
73      79      83      89      97   101   103   107   109   113
127   131   137   139   149   151   157   163   167   173
179   181   191   193   197   199   211   223   227   229
233   239   241   251   257   263   269   271   277   281
283   293   307   311   313   317   331   337   347   349
353   359   367   373   379   383   389   397   401   409
419   421   431   433   439   443   449   457   461   463
467   479   487   491   499   503   509   521   523   541
547   557   563   569   571   577   587   593   599   601
607   613   617   619   631   641   643   647   653   659
661   673   677   683   691   701   709   719   727   733
739   743   751   757   761   769   773   787   797   809
811   821   823   827   829   839   853   857   859   863
877   881   883   887   907   911   919   929   937   941
947   953   967   971   977   983   991   997
C:\Bin>

major_lyu 发表于 2020-2-28 00:11:01

是的,没必要。
给你个简单的
#include <stdio.h>
#include <math.h>

int isPrime(int n)// 判断整数n是否为素数,是返回1,不是返回0
{
    int root = (int)sqrt(n);
    for (int i = 2; i <= root; i++) // 只需要判断到n的平方根,减少循环次数
    {
      if (n % i == 0)
      {
            return 0;
      }
    }
    return 1;
}

int main(void)
{
    int n;
    printf("Please input an integer:\n");
    scanf("%d", &n);
    if(isPrime(n))
    {
      printf("%d is a prime number\n", n);
    }
    else
    {
      printf("%d is not a prime number\n", n);
    }
   
    return 0;
}
页: [1]
查看完整版本: 请教一下判断一个数是不是素数的代码