判断正整数是否是素数的几种方法

题目一:输入一个正整数m,判断是否是素数。

思路一: 素数指只能被1和其本身整除,比如13只能被1和13整除,假如有整数m, 在2~m-1(包括1与m-1)存在某个数n,使得m % n = 0; 那么m就不是素数。
代码如下(编程语言是C):

#include <stdio.h>
int main()
{
 int i,m;
 scanf("%d", &m);     //输入正整数 m;
 for(i = 2; i <= m-1; i++){
     if(m % i == 0){   //遍历[2,m-1],判断 m % i 是否为0;若为0,直接break强制退出循环,执行
   	    printf("%d 不是素数!", m);       //for循环的下一语句,即if语句
   	    break;
     }
 }
 if(i == m)                   //上一for语句主要是判断[2,m-1]是否存在被 m 整除的数,如果没有,
 	printf("%d 是素数!", m); //说明m是素数,此时i == m(因为m除以i不等于0的最后一个数i是m-1
 system("pause");             // 经过i++后i == m),所以可通过i == m来输出素数
 return 0;
}

思路二: 思路一中的 [ 2, m-1 ] 区间可缩小到 [ 2, m / 2 ] ,是因为m不可能被大于 m/2 的数整数。并且在数学上还可以证明,该区间还可缩小为[ 2, sqrt(m) ]。
代码如下(编程语言是C):

#include <stdio.h>
int main()
{
 int i,m;
 scanf("%d", &m);
 for(i = 2; i <= m/2; i++){
     if(m % i == 0){
     printf("%d 不是素数!", m);
     break;
     }
 }
 if(i == m/2 + 1)            //最关键一步;如果m为素数,就代表m除以i,直到i == m/2,m都不能整除[ 2, m-1 ] 里任意一个数,此时再经过i++后,
     printf("%d 是素数!", m);  //i== m/2 + 1,然后通过if语句判断输出素数
 system("pause"); 
 return 0;
}

思路三(2019/4/21添加的方法):

#include<stdio.h>
    int main(void) {
    int N, i, j = 0;
    scanf("%d",&N);
    if (N >= 3 && N <= 10000) {
        for (i = 2; i <= N / 2; i++) {
            if (N % i == 0)
                j++;
        }
    }
    if (j == 0) 
        printf("prime\n");
    else
        printf("not prime\n");
    return 0;
}
  • 17
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值