zoukankan      html  css  js  c++  java
  • CSU 1337 搞笑版费马大定理【优化枚举】

    费马大定理:当n>2时,不定方程an+bn=cn没有正整数解。比如a3+b3=c3没有正整数解。为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, c=79时43+93=793。

    输入两个整数x, y, 求满足x<=a,b,c<=y的整数解的个数。

    Input

    输入最多包含10组数据。每组数据包含两个整数x, y(1<=x,y<=108)。

    Output

    对于每组数据,输出解的个数。

    Sample Input

    1 10
    1 20
    123 456789
    

    Sample Output

    Case 1: 0
    Case 2: 2
    Case 3: 16
    【分析】:数据范围就是一个突破口。
    虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3就会大于10^9,这样等号的右边只有一个10 * c + 3,
    这个最大只能达到10^9数量级,所以,不管输入的x跟y是多少,我们只要取其中的在1到1000的区间就可以了,
    枚举a和b,那么c就可以得到,然后判断c的范围是不是在x到y之间,这样时间复杂度就降到了10^6.
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<string>
    #include<vector>
    #include<stack>
    #include<bitset>
    #include<cstdlib>
    #include<cmath>
    #include<set>
    #include<list>
    #include<deque>
    #include<map>
    #include<queue>
    #define INF 999999
    using namespace std;
    
    int main()
    {
        int x,y;
        int cas=1;
        int cnt;
        while(~scanf("%d%d",&x,&y))
        {
            cnt=0;
            for(int i=x;i<1005;i++)
            {
                for(int j=x;j<1005;j++)
                {
                    if((i*i*i+j*j*j)%10==3&&(i*i*i+j*j*j)/10>=x&&(i*i*i+j*j*j)/10<=y)
                        cnt++;
                }
            }
            printf("Case %d: %d
    ",cas++,cnt);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7384989.html
Copyright © 2011-2022 走看看