素数:也称质数,指在一个大于1的自然数中,满足除了1和自身以外,不能被其他自然数整除的数。与其相对立的即为合数,也即比1大且不是素数的数就是合数。注意一点,1和0既不是素数又不是合数。
判定是否为素数的算法:
1、算法1:依次判断该数(N)能否被2~N-1中的数整除,如果不能被2~N-1中间的任何一个数整除,则为素数。
/*判断一个大于1的自然数是否为素数*/
#include <stdio.h>
#define TRUE 0
#define FALSE 1
int IsPrime(int n)
{
int i=0;
for(i=2; i<n; i++)
{
if(0 == n%i)
return FALSE;
}
return TRUE;
}
int main()
{
int i,n;
scanf("%d", &n);
for(i=2; i<=n; i++)
{
if(TRUE == IsPrime(i))
{
printf("num %d is prime!\r\n", i);
}
}
return 0;
}
2、算法2: 判断N是否为素数只需用2~N/2之间的数去除就可以了。因为一个数的一半的平方大于其本身是从5开始的,解方程:N/2的平方>N 。即 一个数N的两个因数不能同时比N/2大。就可以说一个数若不是素数则一定在2~N/2之间有因数。
/*判断一个大于1的自然数是否为素数*/
#include <stdio.h>
#define TRUE 0
#define FALSE 1
int IsPrime(int n)
{
int i=0;
for(i=2; i<n/2; i++)
{
if(0 == n%i)
return FALSE;
}
return TRUE;
}
int main()
{
int i,n;
scanf("%d", &n);
for(i=2; i<=n; i++)
{
if(TRUE == IsPrime(i))
{
printf("num %d is prime!\r\n", i);
}
}
return 0;
}
3、算法3:求解方法还可以简化为,N不必被2~N-1之间的每一个整数去除,只需被2~根号N之间的每个数去除就可以了。/*判断一个大于1的自然数是否为素数*/
#include <stdio.h>
#include <math.h>
#define TRUE 0
#define FALSE 1
int IsPrime(int n)
{
int i=0;
for(i=2; i<=sqrt(n); i++)
{
if(0 == n%i)
return FALSE;
}
return TRUE;
}
int main()
{
int i,n;
scanf("%d", &n);
for(i=2; i<=n; i++)
{
if(TRUE == IsPrime(i))
{
printf("num %d is prime!\r\n", i);
}
}
return 0;
}