조띵의지극히개인적인공간


원문

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,

a2 + b2 = c2

For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.

Find the product abc.

[편집]번역

피타고라스 수는 a < b < c 이고 다음을 만족하는 3개의 자연수의 쌍입니다.

a2 + b2 = c2

예를 들어 32 + 42 = 9 + 16 = 25 = 52 입니다.

a + b + c = 1000 인 피타고라스 수는 딱 하나가 있습니다.

곱 a*b*c는 얼마인가요



내맘대로 해설 :
피타고라스 수의 정의상 a가 짝수면 b는 홀수다.

a < b < c
a < b < 1000 - a - b
2a+b < a + 2b < 1000

c의 값은 a,b를 가지고 구할수 있기 때문에 for 루프는 2개만 있으면 된다.



void func()
{
int va=0;
for (int a=1; a<1000; a++)
{
va=a*a;  //반복사용하는 값인 미리계산
for (int b=a+1; b<1000; b+=2)  //a와 b는 서로소 이기때문에 *2씩 증가할 수 있다.
{
if (2*a+b>=1000) break;  // 2a+b < 1000  이 조건문으로 불필요한 루프는 타지 않게 함
if (a+2*b>=1000) break;  // a+2b < 1000  이 조건문으로 불필요한 루프는 타지 않게 함
int c = (1000-a-b);
if (va+b*b == c*c)
{
printf("a[%d], b[%d], c[%d] \n",a,b,c) ;
return;
}
}
}
}










저작자 표시
신고
Posted by 조띵


티스토리 툴바