就是除了1和它本身,没有其他因数的
整数。
注:1既不是
素数,也不是合数。
一、素数的一种简单算法(C)
素数即只能被1和其本身整除的数,判断n是否为素数只需用2~n/2之间的数去除就可以了。因为一个数的一半的平方大于其本身是从5开始的,解方程:n/2的平方>n 。即一个数n的两个因数不能同时比n/2大。就可以说一个数若不是
素数则一定在2~n/2之间有因数。而且2,3也是符合下面程序的。
#include <stdio.h>
main(){
int i,j,k=0;
for(i=2;i<=1000;i++)
{
for(j=2;j<=i/2;j++)
if(i%j==0)break;
if(j>i/2)
{
printf("%d ",i);
}
}}
二、
例如 17是
素数,因为它不能被2~16间
其实可以简化,m不必被2~m-1之间的每一个
整数去除,只需被2~根号m之间的每个数去除就可以了。例如判别17是否为
素数,只需使2~4之间的每一个整数去除。为什么可以做如此简化呢?因为如果m能被2~m-1之间任意
整数整除,如果这个数大于根号m,那这个数必定对应的还有一个比根号m小的因子(以16为例,2、8是它的因子,8大于4,2小于4)。
#include<stdio.h>
#include<math.h>
int main()
{ int n,mark=1;
scanf("%d",&n);
if(n==1)
mark=0;
int j=(int)sqrt(n);
for(int i=2;i<=j;i++)
if(n%i==0)
{
mark=0;
break;
}
if(mark)
printf("%d是一个素数\n",n);
else
printf("%d不是一个素数\n",n);
return 0;
}