素数
随着对数学的学习,感觉素数是最伟大的数,先在这里将介绍一些最最最简单的素数算法。在后面会补充唯一分解定理(作用是把任何一个数分解成一堆素数的乘积),在这里先不做简绍。
先来俩个板子(作用是判断一个数是否是素数):
int sushu(int n)
{
int num,i,flag = 0;
num = sqrt(n);
for(i=2;i<=num;i++)
{
if(n%i==0)
{
flag = 1;
break;
}
}
return flag;
}
下面这个板子好用点,稍微复杂的题一般得用下面这个板子。
//prim[]初始化为0 0代表素数,1代表合数
prim[0]=prim[1]=1;
for(int i=2;i*i<TOP;i++)
if(!prim[i])
for(int j=i*i;j<TOP;j+=i)
prim[j]=1;
再来一个板子题:
HDU - 2012 素数判定
#include <stdio.h>
#include <math.h>
int sushu(int n)
{
int num,i,flag = 0;
num = sqrt(n);
for(i=2;i<=num;i++)
{
if(n%i==0)
{
flag = 1;
break;
}
}
return flag;
}
int main()
{
int x,y,flag=0;
while(scanf("%d%d",&x,&y)!=EOF&&(x!=0||y!=0))
{
flag=0;
for(x;x<=y;x++)
{
if(sushu(x*x+x+41)==1)
{
flag=1;
break;
}
}
if(flag==1)
printf("Sorry\n");
else
printf("OK\n");
}
}