CSU 1337
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %lluDescription
费马大定理:当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; }