现在的位置: 首页 > 综合 > 正文

ZJUT Practice 3.3 F – Sum of Cubes(HDU – 3113)

2012年07月17日 ⁄ 综合 ⁄ 共 1361字 ⁄ 字号 评论关闭

Sum of Cubes

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 815    Accepted Submission(s): 182

Problem Description
According to Goldbach’s conjecture, every even number can be expressed as a sum of two odd primes. Which numbers can be expressed as the sum of two cubes?

 

 

Input
For each test case, a line will contain a positive integer n which will be at most one million.

The last line will contain the integer 0, which should not be processed.

 
Output
For each test case, output two integers x and y such that x3 + y3 = n. If there are many such pairs of numbers, choose x to be as small as possible. If there are no such pairs, output “Impossible”.

Sample Input
1
2
3
1000000
0
 
Sample Output
0 1
1 1
Impossible
0 100
 
Source
 
Recommend
lcy
 
 1 #include<iostream>
 2 using namespace std;
 3 const int maxn=1000000,inf=10000;
 4 struct Cube{
 5     int x,y;
 6 };
 7 Cube cube[maxn+1];
 8 int flag[maxn+1];
 9 int main(){
10     //freopen("in.txt","r",stdin);
11     memset(flag,0,sizeof(flag));
12     for(int i=0; i<=maxn; i++){
13         cube[i].x=inf;
14         cube[i].y=inf;
15     }
16     for( int i=-800;i<=800;i++){
17         for(int j=-800;j<=800;j++){
18             int temp=i*i*i+j*j*j;
19             if(temp>=0 && temp<=maxn && i < cube[temp].x){
20                 flag[temp]=1;
21                 cube[temp].x=i;
22                 cube[temp].y=j;
23             }
24         }
25     }
26     for(int n;cin>>n && n;){
27         if (flag[n]==0)
28             cout<<"Impossible\n";
29         else
30             cout<<cube[n].x<<' '<<cube[n].y<<'\n';
31     }
32 }

用傻逼的方法生成n(n=x^3+y^3),存到数组里,把范围改到800才过,原先的计算错了以为200^3-199^3>10^6,把范围写成200,结果还有可能出现更小的x.

悲剧。。。

抱歉!评论已关闭.