zoukankan      html  css  js  c++  java
  • 【21.21%】【codeforces round 382D】Taxes

    time limit per test2 seconds
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    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.

    Examples
    input
    4
    output
    2
    input
    27
    output
    3

    【题目链接】:http://codeforces.com/contest/735/problem/D

    【题解】

    哥德巴赫猜想:
    任何一个大于2的偶数都能分解成两个质数的和;
    所以;如果输入的n为2;就输出1;
    如果大于n;
    则判断是否为偶数;为偶数就输出2;
    如果为奇数;
    ①先判断是不是质数,是质数就输出1
    ②不是质数的话就找离它最近的质数now(now要小于等于n-2);然后用这个数n减去now;得到差;因为n为奇数、且质数肯定是奇数,所以n-now必然为偶数;
    这个时候如果n-now==2,则总的答案为1+1==2,如果n-now!=2,则n-now是大于2的偶数,则n-now可以分解成两个质数的和;则答案为1+2==3;

    【完整代码】

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <set>
    #include <map>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <stack>
    #include <string>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    void rel(LL &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t) && t!='-') t = getchar();
        LL sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    void rei(int &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t)&&t!='-') t = getchar();
        int sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    //const int MAXN = x;
    const int dx[5] = {0,1,-1,0,0};
    const int dy[5] = {0,0,0,-1,1};
    const double pi = acos(-1.0);
    
    int now;
    
    bool is(int x)
    {
        int ma = sqrt(x);
        rep1(i,2,ma)
            if (x%i==0)
                return false;
        return true;
    }
    
    int n;
    
    int main()
    {
        //freopen("F:\rush.txt","r",stdin);
        rei(n);
        if (n==2)
        {
            puts("1");
        }
        else
        {
            if (n%2==0)
            {
                puts("2");
                return 0;
            }
            int now = n;
            while (true)
            {
                if (((n-now>=2) || (n-now==0))&&is(now))
                {
                    n-=now;
                    break;
                }
                now--;
            }
            if (n==0)
                cout <<1<<endl;
            else
            {
                int tt = n;
                if (tt!=2)
                    puts("3");
                else
                    puts("2");
            }
        }
        return 0;
    }
  • 相关阅读:
    SQL SET NOCOUNT (Transact-SQL)
    Delphi WinAPI DragAcceptFiles、DragQueryFile、DragFinish、DragQueryPoint
    Delphi Thread线程错误:Canvas doesn't allow drawing
    Delphi ADOQuery错误:ADOQuery1:commandtext does not return a result set
    医学-药物-未分类-胃舒平(复方氢氧化铝)
    SQL 查询时间超时已过期(SQL 2000、SQL2005、SQL2008、SQL2012等)
    SQL 数据库引擎语句 sp_executesql 的使用介绍(Transact-SQL)
    android 定位代码
    Centos7开放及查看端口
    非常详细的sklearn介绍
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626922.html
Copyright © 2011-2022 走看看