문제 링크: https://www.acmicpc.net/problem/2312
소인수분해를 하면 된다. 간단하다
// No. 2312
// 수 복원하기
// author: joe
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int histogram[100001];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t, n, n_tmp;
int i, j;
cin >> t;
for (i = 0; i < t; ++i) {
fill(histogram, histogram + 100001, 0); //clear
cin >> n;
n_tmp = n;
for (j = 2; j <= n_tmp; ++j) {
while (n_tmp % j == 0) {
n_tmp /= j;
++histogram[j];
}
}
for (j = 2; j <= n; ++j) {
if (histogram[j]) {
cout << j << ' ' << histogram[j] << endl;
}
}
}
return 0;
}
(2020. 01. 27 추가)
위 알고리즘은 되게 대충 짠 거고 효율적으로 하려면 n=2, 3, 5, 7, 9, ... , 2a+1 에 대해서만 검사를 하면 된다. 나중에 시간 남을 때 추가할 예정. 옛날 코드 보니까 창피하다..
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 14500: 테트로미노 (0) | 2020.03.26 |
---|---|
[백준][C++] 3190: 뱀 (0) | 2020.03.26 |
[백준][C++] 2615: 오목 (2) | 2020.03.26 |
[백준][C++] 1939: 중량제한 (0) | 2020.03.26 |
[백준][C++] 17413: 단어 뒤집기 2 (0) | 2019.08.22 |