您的位置:首页 > 其它

数论 ural 1356. Something Easier

2012-03-22 12:12 232 查看
思路:根据哥德巴赫猜想,


任一大于2的偶数都可写成两个质数之和。


任一大于7的奇数都可写成三个素数之和。

详细内容可参照维基百科http://zh.wikipedia.org/wiki/%E5%93%A5%E5%BE%B7%E5%B7%B4%E8%B5%AB%E7%8C%9C%E6%83%B3

#include <iostream>
#include <sstream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <set>
#include <deque>
#include <bitset>
#include <functional>
#include <utility>
#include <iomanip>
#include <cctype>
using namespace std;

#define FOR(i,a,b) for(i = (a); i < (b); ++i)
#define FORE(i,a,b) for(i = (a); i <= (b); ++i)
#define FORD(i,a,b) for(i = (a); i > (b); --i)
#define FORDE(i,a,b) for(i = (a); i >= (b); --i)
#define max(a,b) ((a) > (b)) ? (a) : (b)
#define min(a,b) ((a) < (b)) ? (a) : (b)
#define CLR(a,b) memset(a,b,sizeof(a))
#define PB(x) push_back(x)

typedef long long LL;
typedef vector<int> VI;

const int MAXN = 31623;
const int hash_size = 25000002;
const int INF = 0x7f7f7f7f;

bool p[MAXN]={0}, flag;
int prime[MAXN]={0}, q[4], n, d;
void init()
{
int i;
for(i = 2; i <= 31622; i++)
if(!p[i])
{
prime[0]+=1;
prime[prime[0]]=i;
for(int j=i+i;j<=31622;j+=i)
p[j]=true;
}
}

bool isprime(int n){
if (n == 2)
return true;
else {
int sq, i;
sq = int(sqrt(n*1.0));
for (i = 2; i <= sq+1; ++i)
if (n%i == 0)
return false;
return true;
}
}

void dfs(int k,int x,int y)
{
int i;
if (flag)  return;
if (k == 1)
{
if (isprime(x))
{
FORD(i, d, 1)
printf("%d ", prime[q[i]]);
printf("%d\n", x);
flag = true;
}
return;
}
for (i = y; i<=prime[0]; ++i)
{
if (prime[i]*k > x)  return;
q[k] = i;
dfs(k-1, x-prime[i], i);
}
}

int main()
{
init();
int t, i;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
if (isprime(n))
printf("%d\n", n);
else if (n&1) {
d = 1;
flag = false;
while (!flag)
dfs(++d, n, 1);
}
else {
int tmp;
FORE(i, 1, prime[0]) {
tmp = n - prime[i];
if (isprime(tmp)) {
printf("%d %d\n", prime[i], tmp);
break;
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: