鱼C论坛

 找回密码
 立即注册
查看: 2176|回复: 2

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

[复制链接]
发表于 2020-2-27 23:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 朝歌兮、 于 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是不是多余的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表