Justifying the Conjecture
time limit per test1 second
memory limit per test512 megabytes
inputstandard input
outputstandard output
The great mathematician DreamGrid proposes a conjecture, which states that:
Every positive integer can be expressed as the sum of a prime number and a composite number.
DreamGrid can’t justify his conjecture, so you are invited to write a program to verify it. Given a positive integer n, find a prime number x and a composite number y such that x+y=n.
A prime number is a natural number greater than 1 that cannot be formed by multiplying two smaller natural numbers. A natural number greater than 1 that is not prime is called a composite number. Note that 1 is neither a prime number nor a composite number.
Input
The input contains multiple cases. The first line of the input contains a single integer T (1≤T≤105), the number of cases.
For each case, the only line of the input contains a single integer n (1≤n≤109).
Output
For each case, print two integers x and y in a single line, where 1≤x,y<n. If there are multiple valid answers, you may print any of them. If there is no valid answer, print the integer −1 instead.
Example
inputCopy
3
4
6
7
outputCopy
-1
2 4
3 4
题意:把一个数,拆成一个素数和一个合数。
思路:
小于6不行,偶数用2,奇数用3.
思路1:暴力判断
AC代码:
#include <iostream>
#include <math.h>
int prime(int n)
{
int i;
if(n==1)
return 1;
for(i=2; i<=(int)sqrt(n); i++)
{
if(n%i==0)
return 1;
}
return 0;
}
int main()
{
int i,j,k,n,m;
scanf("%d", &n);
while(n--)
{
scanf("%d", &m);
int t=1;
for(i=2; i<=m/2; i++)
{
if(prime(i)==0&&prime(m-i)==1)
{
printf("%d %d\n", i,m-i);
t=0;
break;
}
}
if(t)
printf("-1\n");
}
return 0;
}
思路2:如果一个数小于等于 5 cout << -1; 如果是一个奇数 就 cout<<3<<(n-3);
如果是一个偶数 就 cout<<2<<(n-2);
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int flag=0;
int x,y;
int n;
scanf("%d",&n);
if(n<=5)
printf("-1\n");
else
{
if(n%2==0)
{
x=2;
y=n-2;
}
else
{
x=3;
y=n-3;
}
printf("%d %d\n",x,y);
}
}
return 0;
}