目录
何为素数
也叫质数,本身只能被1和它本身整除
c语言判断素数
判断i是否为素数,可以用2——i-1之间的数字试除i,如果可以被整除,则不是素数;反之则是。
用循环语句
输入数据:100到200之间的数、2到i-1的数
处理数据:1、可以用for循环设置变量来处理数据
2、用if语句判断i会不会被2——i-1之间的数字整除
输出数据:打印出素数,并计算有几个素数
#include<stdio.h>
int main()
{
int i =0;
int count =0;
for(i=100;i<=200;i++)
{
int j=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
} //当可以整除,直接跳出循环
}
if(i==j)
{
count++;
printf("%d ",i);
}
}
printf("\n count=%d\n",count);
return 0;
}
构造函数
#include<stdio.h>
//设如果是素数,返回1
//不是素数,返回0
int is_prime(int n)
{
int m = 0;
for (m = 2; m <= n; m++)
{
if (n % m == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
printf("%d ", i);
}
return 0;
}
优化:
m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ m的开方之间的每一个整数去除就可以了。如果 m 不能被 2 ~ m的开方 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=28,2 小于 4,8 大于 4,16=44,4=√16,因此只需判定在 2~4 之间有无因子即可。
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,k;
printf("请输入一个数:\n");
scanf("%d",&n);
k = sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)
break;
if(i<=k)
printf("%d不是素数\n",n);
else
printf("%d是素数\n",n);
return 0;