본문 바로가기
반응형

프로젝트오일러24

[C++]프로젝트 오일러 6번 문제&풀이 (1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?) 문제 6번 1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합). 12 + 22 + ... + 102 = 385 1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱). (1 + 2 + ... + 10)2 = 552 = 3025 따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다. 그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까? 접근방법 1. 1부터 100까지 제곱의 합과 합의 제곱을 각각 구한다. 2. 구한 값의 차의 절대값이 우리가 구하고자 하는 값이다. (아무리 생각해도 쉬어가는 문제인 것 같다ㅎㅎ) #include #include usin.. 2020. 11. 19.
[C++]프로젝트 오일러 5번 문제&풀이 (1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수) 문제 5번 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다. 그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까? 접근방법 1. 숫자(num) 20을 2(i)부터 1씩 더해가며 나눠볼껀데... 2. 나눠지면 i+1을, 안나눠지면 숫자(num)+1을 하고 i를 2로 초기화 시켜준다. 3. 반복문을 통과한 값이 우리가 구하고자 하는 값이다. #include using namespace std; int main() { int num = 20; int i = 2; while(i 2020. 11. 19.
[C++]프로젝트 오일러 3번 문제&풀이 (가장 큰 소인수 구하기) 문제 어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다. 예를 들면 13195의 소인수는 5, 7, 13, 29 입니다. 600851475143의 소인수 중에서 가장 큰 수를 구하세요. 접근방법 1. 1부터 차례로 증가시키며 계산하되, 2. 해당 숫자로 나눠지면 계속 나누고, 안 나눠지면 그 때 증가시킨다. 3. 마지막으로 나누었을 때 1이 되도록 하는 값이 우리가 구하고자 하는 값이다. #include using namespace std; int main() { __int64 num = 600851475143; int i = 2; while (num != 1) { if (num % i == 0) { num /= i; //cout 2020. 11. 17.
[C++]프로젝트 오일러 2번 문제&풀이 (피보나치 수열에서 4백만 이하이면서 짝수인 항의 합) 문제 2번 피보나치(Fibonacci) 수열의 각 항은 바로 앞의 항 두 개를 더한 것입니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다. 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 4백만 이하의 짝수 값을 갖는 모든 피보나치 항을 더하면 얼마가 됩니까? 접근방법 1. 첫번째 항은 1, 두번째 항은 2, 세번재 항부터는 이전 두개의 항을 더한 값이 나오는 피보나치 수열 함수를 만든다. 2. while 함수를 이용하여 피보나치 함수 값이 400만보다 작고, 3. 피보나치 함수 값이 2로 나눠지면 result에 저장한다. #include using namespace std; int fibo(int n) { if (n == 1) return 1; else if (n == 2.. 2020. 11. 17.
[C++]프로젝트 오일러 7번 문제&풀이 (10001번째의 소수) 문제 7번 소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다. 이 때 10,001번째의 소수를 구하세요. 접근방법 1. 2부터 시작해서 충분히 큰 수까지 차례로 (=num) 2. 1부터 num까지 나눠본다. 3. 나머지가 0인게 2개일때만 소수이므로, 이때 카운팅을 한다. ( if (count==2) → check+1 ) 4. 이렇게 카운팅 해서 10001번째 나오는 숫자가, 우리가 구하고자 하는 10001번째의 소수이다. #include using namespace std; int main() { int count = 0; // 소수 판별 int check = 1; // 몇 번째 소수인지 for (int num = 2; num < 1000000000; num++) .. 2020. 11. 16.
[프로젝트 오일러] 5번 문제 & 풀이 (1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수) Problem 5 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다. 그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까? 처음 아이디어 이 문제는 최소공배수를 구하는 문제이다 숫자 4, 6의 경우, 이 때의 최대공약수(GCD)는 2, 최소공배수(LCM)는 12이고, 4 = GCD * 2, 6 = GCD * 3 에서 LCM = GCD * 2 * 3 = GCD * 2 X GCD * 3 / GCD 이다. 이 때, 추가로 숫자 7과의 최대공배수를 구하려면, 처음부터 다시 최대공약수&최소공배수를 구할 필요 없이, 앞서 구한 최소공배수인 12와 7 사의의 최소공배수를 구하면, 이 값이 4, 6, 7의 최소공배수가 된다. 같은 논리로, 1부터 차례대로 20.. 2020. 5. 30.
반응형