반응형
리뷰
https://www.acmicpc.net/problem/17425
약수의 합의 누적합을구하는 문제
전역 변수
- N : n의 최대값을 정의할 정수형 상수 변수
- t : 테스트 케이스의 개수를 저장할 변수
- n : g(N)을 구하기 위한 인덱스를 저장할 변수
함수
없음
문제풀이
- 약수의 합을 저장할 long long타입의 벡터 F를 N크기로, 모든 값은 1인 상태로 초기화 한다.
- 2부터 N - 1까지의 수를 순회하며 자신의 배수인 수에 자기 자신을 더해준다.
- long long타입의 벡터 G를 N크기로 초기화 해준다.
- 1부터 N - 1까지의 수를 순회하며 벡터 G에 누적합을 저장해 준다.
- t를 입력 받고, t번의 while루프를 순회해 준다.
- 매 루프타마다 n에 값을 입력 받고, G의 n번 인덱스 값을 출력해 준다.
트러블 슈팅
없음
참고 사항
- 알고리즘 분류에 에라토스테네스의 체가 있는 걸 보니 소수를 통한 최적화가 가능한 문제인 듯 싶다.
- int타입을 사용 시 오버플로우가 나타날 것 같아 long long타입을 사용해 주었다.
정답 코드
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
const int N = 1000001;
int t, n;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
vector<ll> F(N, 1);
for (int i = 2; i < N; ++i)
for (int j = i; j < N; j += i)
F[j] += i;
vector<ll> G(N);
for (int i = 1; i < N; ++i) G[i] = G[i - 1] + F[i];
cin >> t;
while (t--) {
cin >> n;
cout << G[n] << "\n";
}
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[P5] 백준 2568번 전깃줄 - 2 C++ LIS, 이분 탐색 (0) | 2025.01.14 |
---|---|
[G5] 백준 2565번 전깃줄 C++ LIS, 이분 탐색 (0) | 2025.01.13 |
[D4] SWEA 4111번 무선 단속 카메라 C++ 그리디 알고리즘 (0) | 2025.01.13 |
[G4] 백준 16120번 PPAP C++ 스택, 문자열 (0) | 2025.01.13 |
[G5] 백준 1351번 무한 수열 C++ 다이나믹 프로그래밍, 해시맵, 재귀 (0) | 2025.01.12 |