Codeforce 735D Goldbach's Conjecture

Taxes
TimeLimit:2000MS MemoryLimit:256MB
64-bit integer IO format:%I64d

Problem Description
Mr. Funt now lives in a country with a very specific tax laws. The total income of mr. Funt during this year is equal to n (n ≥ 2) burles and the amount of tax he has to pay is calculated as the maximum divisor of n (not equal to n, of course). For example, if n = 6 then Funt has to pay 3 burles, while for n = 25 he needs to pay 5 and if n = 2 he pays only 1 burle.

As mr. Funt is a very opportunistic person he wants to cheat a bit. In particular, he wants to split the initial n in several parts n1 + n2 + … + nk = n (here k is arbitrary, even k = 1 is allowed) and pay the taxes for each part separately. He can’t make some part equal to 1 because it will reveal him. So, the condition ni ≥ 2 should hold for all i from 1 to k.

Ostap Bender wonders, how many money Funt has to pay (i.e. minimal) if he chooses and optimal way to split n in parts.

Input
The first line of the input contains a single integer n (2 ≤ n ≤ 2·109) — the total year income of mr. Funt.

Output
Print one integer — minimum possible number of burles that mr. Funt has to pay as a tax.

SampleInput 1
4
SampleOutput 1
2
SampleInput 2
27
SampleOutput 2
3

Meaning of the questions: to give you a number n, n can be divided into k parts, each part of the tax is the largest number divisible, and asked how much the minimum tax is
thinking: is clear that the best decomposed into prime numbers so that each part of the cost the minimum is 1, so this solution is the least and most excellent. The question now is how to break down a prime number, and then up the posture there is something called Goldbach conjecture.
Goldbach conjecture: Any even number greater than 2 can be written as the sum of two primes. Strong Goldbach conjecture each not less than 2 are even-odd prime number of two.
Goldbach's weak conjecture are each an odd number of not less than three odd prime and 2.

Thus it is clear idea Liao, n 1 first determines whether itself is a prime number if a direct outputs 1 if n is even can be obtained according to the intensity he must guess the sum of two primes and the output is an odd prime number 2.3 If he is an odd number three can be obtained from the sum of the output and quality 3 or you may be a prime number n by subtracting a weak Goldbach conjecture 2 according to whether it is a prime number is determined by subtracting the output if 2 (2 n-2, and both is a prime number), then it indicates that it is not an even number then output 3 (2 as a prime number, n is an even number, but not a prime number)

I offer the following codes to force low

#include <iostream>

using namespace std;

bool isprime(int n)
{
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
            return 0;
    }
    return 1;
}

int main()
{
    int n;

    cin >> n;

    if(n==1||isprime(n))
        cout << "1" << endl;
    else if(n%2==0)
        cout << "2" << endl;
    else
    {
        if(isprime(n-2))
            cout << "2" << endl;
        else
            cout << "3" << endl;
    }

    return 0;
}
Published 54 original articles · won praise 0 · Views 1221

Guess you like

Origin blog.csdn.net/weixin_44144278/article/details/99779645