一、判断一个数是否为素数
从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;
}