https://www.acmicpc.net/problem/21920
풀이1
x의 소인수를 저장해두고, 입력된 수들을 x의 소인수들로 나눠서 서로소인지 여부를 확인한다
제출 코드
#include <iostream>
#include <vector>
using namespace std;
int arr[500001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, x;
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
cin >> x;
vector<int> v;
// x의 소인수 구하기
for (int i = 2; i <= x; i++)
{
if (x % i == 0)
{
v.push_back(i);
while(x % i == 0)
x = x / i;
}
}
int cnt = 0;
long long sum = 0;
// 각 입력값들이 x의 소인수를 약수로 가지는지 확인
for (int i = 0; i < n; i++)
{
bool e = false;
for (auto& s : v)
{
if (arr[i] % s == 0)
{
e = true;
break;
}
}
if (!e)
{
cnt++;
sum += arr[i];
}
}
cout << sum / float(cnt);
}
풀이2
서로소라는 것은 두 수의 최대공약수가 1인 수라는 의미이다
이를 그대로 해석하여 gcd 함수를 이용해 구현이 가능하다
제출 코드
#include <iostream>
#include <numeric>
using namespace std;
int arr[500001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, x;
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
cin >> x;
int cnt = 0;
long long sum = 0;
for (int i = 0; i < n; i++)
{
if (gcd(arr[i], x) == 1)
{
cnt++;
sum += arr[i];
}
}
cout << sum / float(cnt);
}
gcd 함수는 numeric 헤더를 추가하고 사용 가능하다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 14929] 귀찮아(SIB) (0) | 2025.01.28 |
---|---|
[C++][백준 3474] 교수가 된 현우 (0) | 2025.01.28 |
[C++][백준 5347] LCM (0) | 2025.01.27 |
[C++][백준 2304] 창고 다각형 (0) | 2025.01.23 |
[C++][백준 2075] N번째 큰 수 (0) | 2025.01.22 |