费马大定理:当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的整数解的个数。
输入最多包含10组数据。每组数据包含两个整数x, y(1<=x,y<=108)。
对于每组数据,输出解的个数。
1 10
1 20
123 456789
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<stdio.h> #include<iostream> #include<string.h> int main() { int n,m; int g=0; while(scanf("%d%d",&n,&m)!=-1) { ++g; int sum=0; for(int i=n;i<=m&&i<=1000;i++) { for(int j=n;j<=m&&j<=1000;j++) { long long int sum1; sum1=i*i*i+j*j*j; if(sum1%10==3&&(sum1/10)>=n&&(sum1/10)<=m) { sum++; } } } printf("Case %d: %d\n",g,sum); } }