새소식

💻 Programming (프로그래밍)/C++ | 백준

[C++][백준] - 약수의 합 (17427번)

  • -

 

https://www.acmicpc.net/problem/17427

 

 

17427번: 약수의 합 2

두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더

www.acmicpc.net

🔔 문제 : 

 

자연수 A의 모든 약수의 합은 f(A) 이라 표현한다.

1 <=  A <= N인 자연수 A들의 f(A)들의 합 G(N)를 구하시오.

 


🔔 Kick Point :

 

1<= x <= N에서 x 가 어떤 수의 약수일지를 생각해본다.

 

만일 N = 100 이라 가정하고  (배수의 갯수 * 값) 을 구한다.

 

x = 1인 경우에는

x는 숫자 1~100의 모두 약수이기 때문에 = 100 * 1

 

x = 2인 경우에는

x는 숫자 1~100의 2의 배수들의 약수이기 때문에 = 50 * 2

 

x = 3인 경우에는

x는 숫자 1~100의 3의 배수들의 약수이기 때문에 = 33 * 3

 

.......

 

x = 100인 경우에는

x는 숫자 100인 자신의 경우의 약수이기 때문에 = 1 * 100

 

이렇게 쭈욱 진행하여 x가 1 에서 100까지 차례대로 진행한 값을 전부 더하면

우리가 구하려고 하는 G(N)의 값과 같게 된다.

 


🔔 Code :

#include <iostream>
using namespace std;

int main()
{
	int n;
	cin >> n;

	long long res = 0;
	
	for (int i = 1; i <= n; i++) {
		
		res += (n / i) * i;

	}

	cout << res << endl;

}

 

1 <= N <= 1,000,000 범위를 쓰기 때문에 long long int 의 변수를 사용했다.

 


 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.