Problem #001
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/etc

Problem #001

오일러 알고리즘

 

🚩 문제 설명

오일러 알고리즘 #01

◾ 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하는 문제이다.

◾ 간단한 덧셈 문제에 해당한다.

 

 


 

📑 문제 풀이 

//20200102 오일러 알고리즘 Problem 1
#include <stdio.h>
#define MAX 1000

int main(void)
{
	int num = 1;		//정수 초기화
	int cnt = 1;		//카운트 초기화
	int sum3=0, sum5=0, sum15=0;		//3의배수, 5의배수, 15의배수
	int SUM = 0;	//총 합계
	

	// 3의배수 합 구하기
	while (num < MAX)
	{
		num = 3;
		num *= cnt;

		if (num >= MAX)
			break;

		//printf("num: %d\n", num);
		sum3 += num;
		//printf("sum3: %d\n", sum3);
		cnt++;
	}

	// 5의배수 합 구하기
	cnt = 1;
	num = 0;
	while (num < MAX)
	{
		num = 5;
		num *= cnt;

		if (num >= MAX)
			break;

		//printf("num: %d\n", num);
		sum5 += num;
		//printf("sum5: %d\n", sum5);
		cnt++;
	}


	// 15의배수 합 구하기
	cnt = 1;
	num = 0;
	while (num < MAX)
	{
		num = 15;
		num *= cnt;

		if (num >= MAX)
			break;

		//printf("num: %d\n", num);
		sum15 += num;
		//printf("sum5: %d\n", sum15);
		cnt++;
	}

	printf("sum3: %d\n", sum3);
	printf("sum5: %d\n", sum5);
	printf("sum15: %d\n", sum15);
	SUM = sum3 + sum5 - sum15;
	printf("\nSUM: %d", SUM);
	return SUM;

}
👉 (3의 배수의 합) + (5의 배수의 합) - (최소공배수 15의 배수의 합)

◾ 각각 3의 배수, 5의 배수의 합을 구했다.

◾ 그들의 최소공배수인 15의 배수 합도 구해준다.

◾ 1000보다 작은 수 이므로 MAX라는 상수에 1000을 넣어뒀다.

◾ cnt를 1 씩 더해가면서 각각의 수들과 곱해준다.

◾ 그 다음 sum에 더해준다.

 


 

but ,

✅ for문과 if문을 이용하여 간단하게 끝낼 수 있었을 것임.
✅ 만약 3과 5로 나누어 떨어진다면 더하는 수식을 사용했어도 좋았을듯.

알고리즘을 시작하는 단계이고 처음 푸는 문제라서 부족한 점이 많다.

차차 발전해나가자.

 


 

➕ Solution 풀이 사이트 첨부

https://www.mathblog.dk/project-euler-problem-1/

 

Solution to Project Euler problem 1 in C# | MathBlog

The solution to problem 1 of Project Euler: Find the sum of all the multiples of 3 or 5 below 1000.

www.mathblog.dk

 

 

 

 

 

 

 

 

 


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > etc' 카테고리의 다른 글

Problem #006  (0) 2020.01.21
Problem #005  (0) 2020.01.20
Problem #004  (0) 2020.01.16
Problem #003  (0) 2020.01.08
Problem #002  (0) 2020.01.07