|
1. 모든 피타고라스 3쌍을 빠짐없이 구할 수 있다.
a²+k²=2ck
a가 3이상의 어떤수이던지
예를들어 짝수라면 2가 약수이므로 모든 짝수a(3이상)는 성립합니다.
그리고 홀수라면 1이 약수이므로 모둔 홀수a(3이상)는 성립합니다.
2. 알고리즘을 좀 더 간략화. 이를 통해 예를 들어 "a, b, c 모두 1만 이하인 모든 피타고라스 3쌍을 구하시오"에 대한 해를 10초 안에 구할 수 있는 프로그래밍을 한다면 재밌을 거 같습니다.
#include <stdio.h> #define MAX 10000
main() { int a,b,c,k;
for(a=3;a<=MAX;a++) { for(k=1;k<a;k++) { if((a%k==0)&&(a%2==k%2)) { c=(a*a+k*k)/(2*k); b=c-k; printf("%d, %d, %d\n",a,b,c); } } }
}
프로그래밍 소스입니다.
20.89초가 나왔습니다.
다음은 더 빠르게 하기 위해 출력을 파일 출력으로 처리했습니다.
#include <stdio.h> #define MAX 10000
main() { int a,b,c,k; FILE *fp; fp=fopen("pitamath.txt","w");
for(a=3;a<=MAX;a++) { for(k=1;k<a;k++) { if((a%k==0)&&(a%2==k%2)) { c=(a*a+k*k)/(2*k); b=c-k; fprintf(fp,"%d, %d, %d\n",a,b,c); } } } fclose(fp); }
1.52초 걸렸습니다.
그 3이 a로 되는 모든 수를 피타고라스의 수를 구한뒤
4가 a로 되는 피타고라스의 수를 구하는 식으로
a의 값이 하나일지라도 피타고라스의 수는 여러가지이기 때문에
더 오래걸렸습니다.
참고로 이 것들은 제가 찾고 증명했습니다.
이미 있는것일수도 있구요 물론. |