1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다.

12 + 22 + ... + 102 = 385

1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다.

(1 + 2 + ... + 10)2 = 552 = 3025

따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다. 그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?




개인적으로 앞에서 풀었던 문제들보다는 생각을 덜 한것 같다.

<math.h> 헤더파일 안의 pow( ) 함수를 이용해서 쉽게 풀 수 있다.


#include <stdio.h>

#include <math.h>


int main()

{

int jhab = 0, habj = 0;

int i;


for (i = 1; i <= 100; i++) {

jhab += pow(i, 2);

}

for (i = 1; i <= 100; i++) {

habj += i;

}

habj = pow(habj, 2);


printf("%d\n", habj - jhab);

} 

'Algorithm > Project Euler' 카테고리의 다른 글

Problem 5  (0) 2016.08.13
Problem 3  (0) 2016.08.12
Problem 2  (0) 2016.08.12
problem 1  (0) 2016.08.12

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



for 문으로 돌려주면 되겟다.


#include <stdio.h>

int main() {


int i, j, k;

int result = 1;


for (i = 2; i < 20; i++){


for (j = 2; j < i; j++){

if (i%j == 0)

break;

}

if (i == j){


for (k = j; k < 20; k = k*j)

result = result * j;

}

}

printf("%d\n", result);

}

'Algorithm > Project Euler' 카테고리의 다른 글

Problem 6  (0) 2016.08.13
Problem 3  (0) 2016.08.12
Problem 2  (0) 2016.08.12
problem 1  (0) 2016.08.12

어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 

이 소수들을 그 수의 소인수라고 합니다.
예를 들면 13195의 소인수는 5, 7, 13, 29 입니다.


600851475143의 소인수 중에서 가장 큰 수를 구하세요.





먼저 자료형을 맞춰주기 위해 long long int 를 사용해야한다.

서식문자는 %lld 로 받는다.


소인수를 구하는 알고리즘은 책에 다양한 예제가 소개되어있다.

반드시 이해하고 넘어가도록 하자.



#include <stdio.h>


void func() {

long long int num;

while (1) {

printf("Input: ");

scanf("%lld", &num);


if (num<2) 

return;

int a = 2;

int array[100];

int ind = 0;

int i;


while (num != 1) {

if (num%a == 0) {

num = num / a;

array[ind] = a;

ind++;

a = 2;

}

else 

a++;

}


if (ind == 1) printf("소수\n");

else {

for (i = 0; i<ind - 1; i++) {

printf("%d*", array[i]);

}

printf("%d\n", array[i]);

}

}

}


int main(void) {

func();

return 0;

}



'Algorithm > Project Euler' 카테고리의 다른 글

Problem 6  (0) 2016.08.13
Problem 5  (0) 2016.08.13
Problem 2  (0) 2016.08.12
problem 1  (0) 2016.08.12


피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 

1과 2로 시작하는 경우 이 수열은 아래와 같습니다.

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?




피보나치 수열의 특징은 두개의 항을 더한 값이 다음 항에 온다는 것입니다.


#include <stdio.h>


int main()

{

int a = 1;

int b = 2;

int sum = 0, tmp;


while (b < 4000000) {

if (b % 2 == 0)

sum = sum + b;

tmp = a;

a = b;

b += tmp;

}

printf("%d\n", sum);

}


'Algorithm > Project Euler' 카테고리의 다른 글

Problem 6  (0) 2016.08.13
Problem 5  (0) 2016.08.13
Problem 3  (0) 2016.08.12
problem 1  (0) 2016.08.12

+ Recent posts