CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)

时间:2021-04-19 18:11:24

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337

解题报告:虽然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<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
typedef long long INT;
INT th[];
void dabiao()
{
for(INT i = ;i <= ;++i)
th[i] = i * i * i;
}
int main()
{
dabiao();
INT x,y;
int kase = ;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
INT ans = ;
INT a = min(x,(INT)); //不存在大于1000的
INT b = min(y,(INT));
for(INT i = a;i <= b;++i)
for(INT j = a;j <= b;++j)
{
INT s = th[i] + th[j];
if(s % == && s / <= y)
ans++;
}
printf("Case %d: %lld\n",kase++,ans);
}
return ;
}