您的位置:首页 > Web前端

Difference Between Primes

2013-09-13 16:10 239 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4715

题意:给一个偶数,将这个偶数用两个最小的素数表示,如果不能表示则输出FALL; 注意给定的偶数可能为负值。

思路:素数打表,将给定的数从第一个素数开始相加,判断相加后的值是否为素数。

#include <stdio.h>
#include <string.h>

const int N=1000050;
int f
,p[N/2];
int num;//1e6内素数个数

void is_prime()
{
f[1] = 0;
f[2] = 1;
for (int i = 3; i < N; i ++)
{
f[i] = i%2;
}
for (int i = 3; i*i < N; i ++)
{
if (f[i])
{
for (int j = 2*i; j < N; j += i)
f[j] = 0;
}
}
num = 0;
for (int i = 2; i < N; i ++)
{
if(f[i]) p[num++] = i;
}
}
int main()
{
int t;
memset(f,0,sizeof(f));
scanf("%d",&t);
is_prime();
while(t--)
{
int m,i,flag = 0;
scanf("%d",&m);
if (m < 0)
{
flag = 1;
m = -m;
}
for (i = 0; i < num; i++)
{
int x = p[i];
if(f[x+m])
{
if (!flag)
printf("%d %d\n",m+x,x);
else
printf("%d %d\n",x,m+x);
break;
}
}
if (i >= num)
printf("FAIL\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: