프로젝트 오일러 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부터 초기화해서 함.
성취감을 느꼈던 문제.10>
프로젝트 오일러 6
1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).
12 + 22 + ... + 102 = 385
1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).
(1 + 2 + ... + 10)2 = 552 = 3025
따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.
그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?
---------------------------------------------------------------------------------------------------
#includeint 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 값 리턴
}
-----------------------------------------------------------------------------------------------
이 때까지 풀었던 문제 중에 쉬운 문제에 속한다.
댓글
댓글 쓰기