Codeforce 735Dゴールドバッハの予想

税金
TIMELIMIT:2000ミリ秒MemoryLimit:256メガバイト
64ビットIO整数形式:%I64d

問題の説明
氏Funtは今、非常に具体的な税法と国に住んでいます。MRの総収入。今年中にFuntがnの最大の除数として計算されたn(nは≥2)burlesと賃金に彼が持っている税の額に等しくなる(もちろん、nに等しくありません)。例えば、N = 6がFuntは、n = 25のため、彼は5を支払う必要がありながら、N = 2、彼は1つだけburleを支払う場合、3 burlesを支払う必要がある場合。

ミスターとして。Funtは、彼が少しカンニングしたい非常に日和見人です。特に、彼はいくつかの部分では、最初のn個を分割したいN1 + N2 + ... + NK = N(ここでkは任意の偶数= 1が許可されているK)と個別に各パートの税金を支払います。彼はそれが彼を明らかにするために、いくつかの部分が1に等しいことはできません。だから、条件NI≥2は、1からkにすべての私のために保持する必要があります。

Ostapベンダーの不思議、Funtが最適な方法スプリットにn個の部分で彼が選んでいる場合(すなわち、最小)支払わなければならないどのように多くのお金。

入力
MRの合計年間収入-入力の最初の行は、単一の整数N(2≤N≤2・109)を含みます。Funt。

出力は
MRそのburlesの可能な最小数- 1整数を印刷します。Funtは税として支払わなければなりません。

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

質問の意味する:あなたの数nを与えるために、nはk個の部分に分けることができ、税の各部分は、最大数の割り切れるで、どのくらいの最小税がある尋ね
思考:最高の素数に分解することが明らかであるので、コストの各一部最小値は1であるので、この解決策は、少なくとも、最も優れたものです。質問は今の素数を打破する方法で、その後、姿勢までゴールドバッハ予想と呼ばれるものがあります。
ゴールドバッハ予想:2は、2つの素数の和として記述することができるよりも、任意の偶数大きいです。強いゴールドバッハ予想それぞれ2以上は、二つの偶奇素数です。
弱いゴールドバッハ予想各3つの奇素数と2以上の奇数です。

したがって、明確なアイデアはリャオであり、n 1は、第1自体が素数であるか否かを判断する場合に直接出力1 nが偶数の強度に応じて、彼は、2つの素数の和を推測する必要があり得ることができるされ、出力は、奇素数2.3である場合彼が奇数である場合には3つの出力の和と品質3から得ることができるか、素数であってもよいNが素数であるかどうかに応じて弱いゴールドバッハ予想2を減算することにより、2(2 N-2、及び両方場合に出力を減算することによって決定されます)素数であり、それは)それは次いで素数として出力3(2偶数ないことを示し、nは偶数ではなく、素数であります

私は力の低いに以下のコードを提供します

#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;
}
公開された54元の記事 ウォンの賞賛0 ビュー1221

おすすめ

転載: blog.csdn.net/weixin_44144278/article/details/99779645