DY N DY

실력키우기 약수와배수(C++) 본문

PARK/ALGORITHM

실력키우기 약수와배수(C++)

손세지 2016. 5. 8. 22:45

1071 : 약수와 배수

제한시간: 1Sec    메모리제한: 32mb
해결횟수: 616회    시도횟수: 937회   



주어진 정수들 중 입력받은 수의 약수와 배수의 합을 각각 출력하라.

 

첫 줄에 정수의 개수 n (1<= n <=40)을 입력받는다.
둘째 줄에는 n개의 정수를 한 줄에 입력 받는다.
셋째 줄에는 약수와 배수를 구할 정수 m(1<=m<=100)을 입력 받는다.



첫 줄에는 정수 m의 약수의 합을 둘째 줄에는 정수 m의 배수의 합을 출력한다.


 [Copy]
6
2 3 5 12 18 24
12
 [Copy]
17
36



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**************************************************************
    Problem: 1071
    User: a132034
    Language: C++
    Result: Success
    Time:0 ms
    Memory:1740 kb
****************************************************************/
 
 
#include    <iostream>
using namespace std;
 
int main()
{
    int n;
    int* arr;
    int m;
    cin >> n;
    arr = new int[n];
    for (int i = 0; i < n; ++i)
    {
        cin >> arr[i];
    }
    cin >> m;
 
    int sDiv = 0, sMul = 0;
    for (int i = 0; i < n; ++i)
    {
        if (arr[i] % m == 0)
            sMul += arr[i];
        if (m % arr[i] == 0)
            sDiv += arr[i];
    }
 
    cout << sDiv << endl << sMul;
 
    return 0;
}



문제 이해만 하면 어려운 문제는 아니다. 

두번째 줄에 있는 배열 중 

세번째로 입력받은 수의 약수가 배열 내에 있다면 찾아서 찾은 값의 합을, 배수도 동일하게 찾은 값의 합을 출력하는 문제이다. 


기본적으로 입력받은 값이 m일 때, m을 어떤 수로 나누었을 때 나머지가 0인 어떤 수가 약수이다. 

배수는 어떤 수를 m으로 나누었을 때, 나머지가 0이 되는 어떤 수가 배수이다.