프로젝트 오일러 5~6

프로젝트 오일러 5

1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.
그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?
----------------------------------------------------------------------------------------------
#include

void main()
{
int num[10] = {11,12,13,14,15,16,17,18,19,20}; //1~10은 제외(Or이 아니라 And이기 때문)
int result = 1;  //1부터 차근차근 더해가며 조건을 찾음
int i,count=0;

while(1)
{
for(i=0;i<10 i="" p=""> {
if(result%num[i] == 0)  //num 배열에 있는 숫자를 하나하나 넣어가며
count++;            조건이 성립 될 때마다 count 값을 1씩 더함
else
break;              //나눠지지도 않으면 그냥 아웃
}
if(count == 10) //num 배열 중 숫자 10개를 모두 만족시키는 값을 출력
{
printf("%d\n",result);
break; //while 문 나옴
}
count = 0; //count 값을 다시 0으로 만들고 
result++;      result 값을 하나씩 올려가며 조건이 모두 성립되는 값을 찾음
}
}
----------------------------------------------------------------------------------------------
소수인 11,13,17,19인 값들을 모두 곱한 46189부터 result에 초기화해서 해봤지만 값이 안나와서 그냥 1부터 초기화해서 함.
성취감을 느꼈던 문제.

프로젝트 오일러 6

1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).
12 + 22 + ... + 102 = 385
1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).
(1 + 2 + ... + 10)2 = 552 = 3025
따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.
그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?
---------------------------------------------------------------------------------------------------
#include

int Calc1(int ); //합의 제곱
int Calc2(int ); //제곱의 합

void main()
{
unsigned long long int Final=Calc1(100)-Calc2(100); //혹시나 해서 큰 바이트로 데이터 타입 설정

printf("%d\n",Final);
}

int Calc1(int num)
{
int result=0;
int i;

for(i=1;i<=100;i++)
result+=i; //result 값에 1부터 100까지 합을 초기화

return result*result; //result 값 제곱해서 리턴
}

int Calc2(int num)
{
int result=0;
int i;

for(i=1;i<=100;i++)
result+=i*i;  //제곱의 합을 result 변수에 넣는다.

return result; //result 값 리턴

}
-----------------------------------------------------------------------------------------------
이 때까지 풀었던 문제 중에 쉬운 문제에 속한다.

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리