CodeForces 735 D.Taxes(数论)

来源:互联网 发布:华西期货软件下载 编辑:程序博客网 时间:2024/06/06 08:43

Description
给出一个数n,将其拆成最少数量的素数
Input
一个整数n(2<=n<=2e9)
Output
输出拆成的最少素数个数
Sample Input
4
Sample Output
2
Solution
n为2答案是1
n为大于2的偶数可以拆成两个素数,答案是2
n为奇数有三种情况:
1.n是素数,答案是1
2.n-2是素数,答案是2
3.n拆成3和一个偶数,偶数再拆成两个素数,答案是3
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 55555bool check(int n){    for(int i=2;i*i<=n;i++)        if(n%i==0)return 0;    return 1;}int n;int main(){    while(~scanf("%d",&n))    {        if(check(n))printf("1\n");        else if(n%2==0||check(n-2)) printf("2\n");        else printf("3\n");    }     return 0;}
0 0