Perfect Cubes
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 12595 | Accepted: 6707 |
Description
For hundreds of years Fermat's Last Theorem, which stated simply that for n > 2 there exist no integers a, b, c > 1 such that a^n = b^n + c^n, has remained elusively unproven. (A recent proof is believed to be correct, though it is still undergoing scrutiny.) It is possible, however, to find integers greater than 1 that satisfy the "perfect cube" equation a^3 = b^3 + c^3 + d^3 (e.g. a quick calculation will show that the equation 12^3 = 6^3 + 8^3 + 10^3 is indeed true). This problem requires that you write a program to find all sets of numbers {a,b,c,d} which satisfy this equation for a <= N.
Input
One integer N (N <= 100).
Output
The output should be listed as shown below, one perfect cube per line, in non-decreasing order of a (i.e. the lines should be sorted by their a values). The values of b, c, and d should also be listed in non-decreasing order on the line itself. There do exist several values of a which can be produced from multiple distinct sets of b, c, and d triples. In these cases, the triples with the smaller b values should be listed first.
Sample Input
24
Sample Output
Cube = 6, Triple = (3,4,5) Cube = 12, Triple = (6,8,10) Cube = 18, Triple = (2,12,16) Cube = 18, Triple = (9,12,15) Cube = 19, Triple = (3,10,18) Cube = 20, Triple = (7,14,17) Cube = 24, Triple = (12,16,20)
题目大意:给定一个数n,三个数a,b,c大于1,问n以内有多少个数字满足n^3 = a^3 + b^3 + c^3。
#include <stdio.h> #include <iostream> #include <string.h> using namespace std; int ans[5]; int visted[200]; int selected[200]; void DFS(int n, int index) { if (index == 3) { if (n * n * n == ans[0] * ans[0] * ans[0] + ans[1] * ans[1] * ans[1] + ans[2] * ans[2] * ans[2] && selected[ans[0]] * selected[ans[1]] * selected[ans[2]] == 0) { printf("Cube = %d, Triple = (%d,%d,%d) ", n, ans[0], ans[1], ans[2]); selected[ans[0]] = selected[ans[1]] = selected[ans[2]] = 1; } return; } for (int i = 2; i < n; i++) { if (!visted[i]) { visted[i] = 1; ans[index] = i; DFS(n, index + 1); visted[i] = 0; } } } int main() { int n; scanf("%d", &n); for (int i = 6; i <= n; i++) { memset(visted, 0, sizeof(visted)); memset(selected, 0, sizeof(selected)); DFS(i, 0); } return 0; }