기타등등/알고리즘 기록
[C++]약수의 개수
CodeJB
2021. 6. 18. 15:48

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int n, i, j, cnt = 0;
int arr[50001];
scanf("%d",&n);
for(i = 1; i <= n; i++){
for(j = i; j <= n; j = j+i){ //i를 약수로 갖는 숫자들은 i의 배수(i만큼 증가)이다.
arr[j]++;//i를 약수로 갖는 숫자 j번째 인덱스에 1씩 count한다.
}
}
for(i = 1; i <= n; i++){
printf("%d",arr[i]);
}
return 0;
}
성찰
- 역으로 생각하는 방법을 적용한다 : 8의 약수는 무엇일까? => 8을 약수로 갖는 수는 무엇일까? == 8의 배수는 무엇일까?
- 1~i를 약수로 갖는 수를 모두 count한다.
- i를 약수로 갖는 수는 i의 배수이다.(2를 약수로 갖는 수는 2,4,6,8..)