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
  • 相关阅读:
    python12306抢票
    函数、迭代器、生成器、装饰器
    类(面向对象、增删改查、继承、多态、封装、反射)
    js循环、异常、函数
    js引入、注释、事件
    天融信护网面试
    Java URL处理
    Java多线程编程
    Java网络编程
    Java序列化
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7384989.html
Copyright © 2011-2022 走看看