简单模拟题。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
const int maxn = 10001;
int prime[maxn];
int vis[maxn] = {0};
int tot;
void init()
{
int i, j;
for(i = 2, tot = 0; i < maxn; i++) if(!vis[i])
{
prime[tot++] = i;
for(j = i*i ; j < maxn; j+=i) vis[j] = 1;
}
return ;
}
int is_prime(int v)
{
int l = 0, h = tot -1;
while(l <= h)
{
int m = (l+h)/2;
if(prime[m] == v) return 1;
else if(prime[m] > v) h = m-1;
else l = m+1;
}
return 0;
}
int main()
{
int m;
init();
while(~scanf("%d", &m))
{
int i, j;
int flag = 0;
int v = m/2;
for(i = v; i >= 0; i--)
{
if(is_prime(i) && is_prime(m-i))
{
flag = 1;
break;
}
}
if(flag) printf("%d %d\n", i, m-i);
}
return 0;
#include <stdlib.h>
#include <string.h>
using namespace std;
const int maxn = 10001;
int prime[maxn];
int vis[maxn] = {0};
int tot;
void init()
{
int i, j;
for(i = 2, tot = 0; i < maxn; i++) if(!vis[i])
{
prime[tot++] = i;
for(j = i*i ; j < maxn; j+=i) vis[j] = 1;
}
return ;
}
int is_prime(int v)
{
int l = 0, h = tot -1;
while(l <= h)
{
int m = (l+h)/2;
if(prime[m] == v) return 1;
else if(prime[m] > v) h = m-1;
else l = m+1;
}
return 0;
}
int main()
{
int m;
init();
while(~scanf("%d", &m))
{
int i, j;
int flag = 0;
int v = m/2;
for(i = v; i >= 0; i--)
{
if(is_prime(i) && is_prime(m-i))
{
flag = 1;
break;
}
}
if(flag) printf("%d %d\n", i, m-i);
}
return 0;
}
浙公网安备 33010602011771号