티스토리 뷰
임의의 N에 대하여 N!은 소수들의 곱으로 표현하는 방법이 있다.
예를 들면 825는 (0 1 2 0 1)로 표현이 가능한데, 이는 2는 없고 3은 1번, 5는 2번, 7은 없고, 11은 1번의 곱이라는 의미이다.
101보다 작은 임의의 N에 대하여 N 팩토리얼을 이와 같은 표기법으로 변환하는 프로그램을 작성해보자.
#include<stdio.h>
#include<vector>
int main() {
int n, i, j, temp;
scanf("%d", &n);
std::vector<int> check(n + 1);
// 소인수분해 사용
// 굳이 팩토리얼을 다 계산한 이후에 소인수분해 하지말고 for문 돌려서 소인수분해
for (i = 2; i <= n; i++) {
temp = i;
j = 2;
while (true) {
if (temp%j == 0) {
temp = temp / j;
check[j]++;
}
else j++;
if (temp == 1)break;
}
}
printf("%d! = ", n);
for (i = 2; i <= n; i++) {
if (check[i] > 0) {
printf("%d ", check[i]);
}
}
}
팩토리얼을 계산하고나서 소수들의 곱으로 표현하지 않고, 1부터 N까지 for문을 돌면서 각각의 수에서 소인수 분해한다.
변수 j는 합성수를 나눌 소수로 2부터 시작한다. 2로 나눌 수 있을 만큼 나누고, 더이상 안나눠지면 1 증가시킨다.
2로 나눌 수 있을만큼 나누니까 4, 6, 8 등 소수가 아닌 수로는 나눠지지 않을 것이다.
나눠지는 수를 check 배열에 카운팅한다.
'알고리즘 > C++' 카테고리의 다른 글
[C++] 3의 개수 (시간 제한) (0) | 2020.02.24 |
---|---|
[C++] N!에서 0의 개수 (0) | 2020.02.24 |
[C++] 마라톤 (0) | 2020.02.24 |
[C++] 석차 구하기 (브루트 포스) (0) | 2020.02.24 |
[C++] jolly jumpers (0) | 2020.02.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CellForRowAt Not Called
- 웹 배포
- cleaned_data
- python 웹 배포
- Realtime Database
- Django
- django 개발일지
- ModelForm Form 차이
- django 태그
- django clean
- iOS 데이터베이스
- 장고 게시판
- 장고 태그달기
- pythonanywhere배포
- pythonanywhere배포방법
- django pythoneverywhere
- iOS 화면 안나옴
- iOS UITableView 출력안됨
- 실시간 데이터베이스
- 알파벳 카운팅
- 까만 화면
- UITableViewController Not Working
- django tag
- 테이블출력안됨
- CellForRowAt 호출안됨
- django 로그인접근
- 데이터베이스 추천
- django 게시판
- Firebase 데이터베이스 추천
- iOS 검은 화면
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함