博客园 首页 私信博主 显示目录 隐藏目录 管理

CSU 1337(费马大定理)

 

                                    CSU 1337

Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
 

Description

费马大定理:当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<iostream>
using namespace std;
int main()
{
 int a,b,c,x,y,m=0,n;
 while(cin>>x>>y&&x&&y)
 {
     n=0;
     for(a=x;a<=1000&&a<=y;a++)
        for(b=x;b<=1000&&b<=y;b++)
     {
         int s=a*a*a+b*b*b;
         if(s%10!=3)continue;
         c=s/10;
         if(c>=x&&c<=y)
            n++;
     }++m;
     cout<<"Case "<<m<<": "<<n<<endl;

 }
return 0;

}

 

 
posted @ 2015-07-17 19:39  hfcnal  阅读(205)  评论(0编辑  收藏  举报