poj2909 || poj2262

时间:2022-08-19 06:32:45
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int isPri(int a, int b)
{
int i;
for(i=; i <= sqrt(a); i++)
{
if(a%i == )
return ;
}
for(i=; i <= sqrt(b); i++)
{
if(b%i == )
return ;
}
return ;
}
int main()
{
int n,flag,i,cout;
while(scanf("%d",&n) != EOF && n)
{
cout=;
for(i=; i< n/+; i++)
{
flag=isPri(i,n-i);
if(flag == )
cout++;
}
printf("%d\n",cout);
}
return ;
}

for循环用于产生数对,用i<n/2+1或i<=n/2都可以避免产生重复的数对

在判断素数的时候采用小学生做法:从2到sqrt(n),i=2,i<=n(必须加=)

如果是2和3,根本不会经过循环

以后都用《埃拉托斯特尼筛法》打表

算法描述:小于2的不是素数,用一个数组a[10000],元素下标表示这个数,元素的值表示是否是素数,c++做法是,bool a[10000],将a[0]和a[1]赋成0,从2开始,2*2,2*3...

2*6...这些下标对应的元素值全改0,在此环境下再次寻找下一个素数,再一次,3*2,3*3,3*4...乘积整体小于10000

ar[]
ar[]=;
ar[]=;
for(i=;i<;i++)
{
ar[i]=;
}
for(i=;i<;i++)
{
if(ar[i] == )
{
for(j=;i*j<;j++)
{
ar[i*j] = ;
}
}
}

下面的动态图很清楚:

http://blog.csdn.net/kingwolfofsky/article/details/7199758

相关文章