되는대로 살자

[C언어 기출문제&풀이] Perfect Cubes 본문

2009~2014/C/C++

[C언어 기출문제&풀이] Perfect Cubes

malu 2010. 11. 13. 08:43
프로그램 명: cube
제한시간: 1 초

페르마의 마지막 정리 " 2 보다 큰 n 에대해서 , a^n = b^n + c^n 인 1 보다 큰 a , b , c 가 존재하지 않는다 "

몇 백년 동안 페르마의 마지막 정리는 증명되지 않았다. ( 최근에 이 정리가 증명되었지만 , 아직 더 엄밀한 검증이 필요하다)

우리가 관심있는 식은 다음 식이다.( b,c,d > 1)

a3 = b3 + c3 + d3
N 이 주어질 때 N 이하 인 a 로 등식을 만족하는 집합 {a,b,c,d} 를 모두 구하는 것이다.

입력

100 이하인 정수 N 이 주어진다.

출력

출력 예의 형식으로 출력한다. a 가 작은 순으로 출력하고 a 가 같은 경우 b 가 작은 순으로 출력한다.

입출력 예

입력

24

출력

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)
출처: Mid-Central USA 1995


#include <stdio.h>

int main()
{
 int i,j,k,a,limit;
 scanf("%d",&limit);
 for(a=2;a<=limit;a++)
 {
  for(i=2;i<=a;i++)
  {
   if(i*i*i>a*a*a) break;
   for(j=2;j<=a;j++)
   {
    if(i*i*i+j*j*j>a*a*a) break;
    for(k=2;j<=a;k++)
    {
     if(i*i*i+j*j*j+k*k*k>a*a*a) break;
     else if(i*i*i+j*j*j+k*k*k==a*a*a)
     {
      if(a>limit) return 0;
      printf("Cube = %d, Triple = (%d,%d,%d)\n",a,i,j,k);
      a++;
     }
    }
   }
  }
 }
}