素数(持续更新)

一、判断一个数是否为素数

从2开始对输入数a取余,直到a-1,判断出是否为素数,并输出

#include<stdio.h> 
int main()
{
	int i,is=1,a;
//定义is判断是否为素数,先假设全是素数,赋值1
    scanf("%d",&a);
	for(i=2;i<=a;i++){
		if(a%i==0){
			is=0;
//若能整除则不是素数,变为0
			break;
		}
	}
    if(is)
    {
    printf("%d",a);
	}
    return 0;
}

优化(1)

取余到 a/2 即可,不用继续取余

for(i=2;i<a/2;i++)

优化(2)

取余到 √a ,但要调用#include<math.h>里的 sqrt 函数

#include<math.h> 
for(i=2;i<=sqrt(a);i++)

 优化(3)

除了2,其余素数都是 奇数 ,可先判断是否为 奇数

#include<math.h>
for(i=2;i<=sqrt(a);i++){//可继续用sqrt减少遍历数
    if(a%2==0)
    {
    is=0;
    break;
//判断是否为奇数,不是则is=0,跳出
    }
    if(a%i==0)
    {
	    is=0;
		break;
	}

优化(4)

所有数可以由6a,6a+1,6a+2,6a+3,6a+4,6a+5表示出来,其中6a,6a+2,6a+4中除了2以外,其余都可被2整除,6a,6a+3中除了3以外,都可以被3整除,故除了2,3其余素数都在 6a+1和 6a+5 中,故可将步长改为6判断

#include<math.h>

for(i=5;i<=sqrt(a);i+=6){//可继续用sqrt减少遍历数
    if(a%i==0||a%(i+2)==0)
    {
	    is=0;
		break;
	}

二、筛选一个区间内素数

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值