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=,n;
while(cin>>x>>y&&x&&y)
{
n=;
for(a=x;a<=&&a<=y;a++)
for(b=x;b<=&&b<=y;b++)
{
int s=a*a*a+b*b*b;
if(s%!=)continue;
c=s/;
if(c>=x&&c<=y)
n++;
}++m;
cout<<"Case "<<m<<": "<<n<<endl; }
return ; }
 
上一篇:leetcode_question_112 Path Sum


下一篇:ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)