프로그래밍
(C언어)프로젝트 오일러(Project Euler)12.500개 이상의 약수를 갖는 가장 작은 삼각수는?
1부터 n까지의 자연수를 차례로 더하여 구해진 값을 삼각수라고 합니다.예를 들어 7번째 삼각수는 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 이 됩니다. 이런 식으로 삼각수를 구해 나가면 다음과 같습니다. 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 이 삼각수들의 약수를 구해봅시다. 1: 1 3: 1, 3 6: 1, 2, 3, 6 10: 1, 2, 5, 10 15: 1, 3, 5, 15 21: 1, 3, 7, 21 28: 1, 2, 4, 7, 14, 28 위에서 보듯이, 5개 이상의 약수를 갖는 첫번째 삼각수는 28입니다. 그러면 500개 이상의 약수를 갖는 가장 작은 삼각수는 얼마입니까? #include int main() { int n = 0, i, sum, c..
소수점 이하 자리에 나오는 0을 없애고 싶을 때
소수를 출력하기 위해서 형식지정자를 이용하는데, %f를 사용하면 소수점 이하 여섯자리까지 자동으로 출력됩니다. 그래서 3.14를 출력하고 싶어도 3.140000이 출력됩니다. 어떤 커뮤니티에서, 0이 출력되지 않게 하고 싶은데 어떻게 해야 하는지 질문하는 글이 올라와서 저도 궁금해졌습니다. 한참을 삽질하다가 아주 간단한 방법이 있음을 알았죠. 바로 형식지정자(format specifier)를 이용하는 것입니다. #include int main(void) { float pi = 3.14; printf("%%f를 사용했을 때:%f\n", pi); printf("%%e를 사용했을 때:%e\n", pi); printf("%%g를 사용했을 때:%g\n", pi); return 0; } %g 형식 지정자를 이용해 ..
(C언어)프로젝트 오일러(Project Euler)11. 20×20 격자에서 연속된 네 숫자의 곱 중 최대값
아래와 같은 20×20 격자가 있습니다. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 ..
(C언어)프로젝트 오일러(Project Euler)10. 이백만 이하 소수의 합
문제 10 이하의 소수를 모두 더하면 2 + 3 + 5 + 7 = 17 이 됩니다. 이백만(2,000,000) 이하 소수의 합은 얼마입니까? 코드 #include #include #include #define NUM 2000000 int main(void) { int i, j; int* prime= (int*)malloc(sizeof(int) * NUM); //배열 동적할당 long long sum = 0; for (i = 2; i
(C언어)프로젝트 오일러(Project Euler)9. a + b + c = 1000 이 되는 피타고라스 수
문제 세 자연수 $a$, $b$, $c$ 가 피타고라스 정리 $a^{2}+b^{2}=c^{2}$를 만족하면 피타고라스 수라고 부릅니다 (여기서 $a < b < c$ ). 예를 들면 $3^{2} + 4^{2} = 9 + 16 = 25 = 5^{2}$이므로 $3$, $4$, $5$는 피타고라스 수입니다. $a + b + c = 1000$ 인 피타고라스 수 $a$, $b$, $c$는 한 가지 뿐입니다. 이 때, $a × b × c$ 는 얼마입니까? 코드 #include int main(void) { int i, j, k; for (i = 1; i < 1000; i++) { for (j = 2; j < 1000; j++) { if (i < j) { k = 1000 - i - j; if (i * i + j * j..
(C언어)프로젝트 오일러(Project Euler)8. 1000자리 숫자 안에서 이어지는 5자리 숫자의 곱 중 최대값은?
문제 다음은 연속된 1000자리 숫자입니다 (읽기 좋게 50자리씩 잘라놓음). 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 303589072962904915604407723907138105158593079608..
(C언어)프로젝트 오일러(Project Euler)7. 10001번째의 소수
문제 소수를 크기 순으로 나열하면 2, 3, 5, 7, 11, 13, ... 과 같이 됩니다. 이 때 10,001번째의 소수를 구하세요 코드 #include int main(void) { int i, j; int count = 0; for (i = 1; i; i++) { for (j = 2; j < i; j++) { if (i % j == 0) break; } if (i == j) count++; if (count == 10001) { printf("%d\n", i); break; } } return 0; } 판별할 수의 반까지만 본다거나 에라토스테네스의 체를 활용하여 소수를 구하기도 하던데, 그냥 기본적인 방법을 사용했다. 10001번째가 될 소수가 얼마나 클 지 몰라 i를 무한히 증가시켰다. 소수는 ..
(C언어)프로젝트 오일러(Project Euler) 6. 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?
문제 1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다. 그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까? 코드 #include int main(void) { int sum_square = 0, square_sum = 0; //합의 제곱, 제곱의 합 int sum = 0; //합을 임시로 저장할 변수 int i; for (i = 1; i