【Virtual Judge】The 2019 China Collegiate Programming Contest Harbin Site J—Justifying the Conjecture

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;
}


发布了650 篇原创文章 · 获赞 190 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104441381