费马大定理:当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 101 20123 456789
Sample Output
Case 1: 0Case 2: 2Case 3: 16
/*
解题报告: 注意个位的关系,2^3%10=8, 8^3%10=2, 3^3%10=7, 7^3%10=3; 其余的各位的三次方就是本身。
即只要从给出的X,Y;可以得出X^3+Z^<=Y*10+3; 从而得到最大的数为Z;在从 X->Z遍历一次
就可以得出结果了。得到第一个数在看它的个位数,再找一个数的三次方的个位与第一个数的
个位之和为3就可以了。
注意:每次循环可以加10。
*/
标程:
#include<stdio.h>
int main()
{
//freopen("a.txt","r",stdin);
long long x,y,i,j,t;
int a=0;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
t=x*x*x;
a++;
y=y*10+3;
int cnt=0;
for(i=x,j=1;t+i*i*i<=y;i++,j++);
long long ii=i,jj=j;
//printf("%lld %lld\n",i,j);
for(i=x;i<=ii;i++)
{
int k=(13-i*i*i%10)%10;
if(k!=0 && k!=1 && k!=4 && k!=5 && k!=6 && k!=9) k=10-k;
for(j=x-x%10+k;j<ii;j+=10)
{
if(j<x) j+=10;
if(j*j*j+i*i*i<=y) cnt++; //printf("%lld %lld\n",i,j);
}
}
printf("Case %d: %d\n",a,cnt);
}
return 0;
}
int main()
{
//freopen("a.txt","r",stdin);
long long x,y,i,j,t;
int a=0;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
t=x*x*x;
a++;
y=y*10+3;
int cnt=0;
for(i=x,j=1;t+i*i*i<=y;i++,j++);
long long ii=i,jj=j;
//printf("%lld %lld\n",i,j);
for(i=x;i<=ii;i++)
{
int k=(13-i*i*i%10)%10;
if(k!=0 && k!=1 && k!=4 && k!=5 && k!=6 && k!=9) k=10-k;
for(j=x-x%10+k;j<ii;j+=10)
{
if(j<x) j+=10;
if(j*j*j+i*i*i<=y) cnt++; //printf("%lld %lld\n",i,j);
}
}
printf("Case %d: %d\n",a,cnt);
}
return 0;
}