方法一:全部遍历
方法二:只遍历奇数
素数的定义:素数就是质数,素数有无限个。一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数叫素数。
方法一:判断一个整数m是否是素数,只需 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数
常见题目:
(1)判断输入的某个数m是不是素数
#include <stdio.h>
int isprime(int m)
{
int i,j;
int flag;//置0不是素数,置1是素数
while(m != 1)
{
for(i = 2;i < m;i++)
{
if(m % i == 0)
{
flag = 0;
printf("%d不是素数\n",m);
break;
}
}
if(m == i)
{
flag = 1;
printf("%d是素数\n",m);
}
m--;
}
}
int main(int argc,char const *argv[])
{
int m;
printf("请输入需要判断的数:");
scanf("%d",&m);
isprime(m);
return 0;
}
(2)将m以内的素数(包括m)打印出来
只需要在上题基础上加上一个while循环,如下:
while(m != 1)
{
for(i = 2;i < m;i++)
{
if(m % i == 0)
{
flag = 0;
printf("%d不是素数\n",m);
break;
}
}
if(m == i)
{
flag = 1;
printf("%d是素数\n",m);
}
m--;
}
(3)将某个区间内的素数打印出来,比如【m,n】区间(m<n)
只需要将上题的while循环改成你键盘键入的值即可
#include <stdio.h>
int isprime(int m)
{
int i,j;
int flag;//置0不是素数,置1是素数
while(m != 2)
{
for(i = 2;i < m;i++)
{
if(m % i == 0)
{
flag = 0;
printf("%d不是素数\n",m);
break;
}
}
if(m == i)
{
flag = 1;
printf("%d是素数\n",m);
}
m--;
}
}
int main(int argc,char const *argv[])
{
int m;
printf("请输入需要判断的数:");
scanf("%d",&m);
isprime(m);
return 0;
}
方法二:以上方法我们需要对每个数字遍历【2,m-1】次,计算量还是很大的,但是实际上我们可以知道偶数肯定不是素数,所以我们可以先去掉偶数,只判断奇数
#include <stdio.h>
int main(int argc,char const *argv[])
{
int digit;//只判断奇数
int divisor;
int num;//输入需要判断的数字
printf("请输入需要判断的数字:");
scanf("%d",&num);
printf("2\n");//首先把2打印出来
for (digit = 3; digit <= num; digit += 2)
{
for (divisor = 3; divisor < digit; divisor += 2)
{
if(digit % divisor == 0)
{
break;
}
}
if(divisor == digit)
{
printf("%d\n",digit);
}
}
return 0;
}