문제:

양의 정수 N이 주어졌을 때, 이 수를 소인수분해 한 결과를 출력하는 프로그램을 작성하시오.

입력:

첫째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스마다 양의 정수 N (2<=N<=100,000)이 주어진다.

출력:

각 테스트 케이스마다 각 인수와 그 인수가 곱해진 횟수를 한 줄씩 출력한다. 출력 순서는 인수가 증가하는 순으로 한다.

풀이 방법:

소인수분해는 말 그대로 소수로만 분해가 된다. 따라서 2부터 시작해서 n이 1이 될 때까지 소수로 나눠주면 된다. 소수인지 따로 판별이 필요하지 않다.(이전에서 이미 다 나눠버렸기 때문에) 따라서 각 count별로 answer를 계산하고 더 이상 나눠주지 못한다면 초기화를 하고 다음으로 넘어가면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for i in range(int(input())):
    n=int(input())
    count=2
    answer = 0
    while n!=1:
        if n%count==0:
            n//=count
            answer+=1
        else:
            if answer==0:
                pass
            else:
                print(count,answer)
            answer=0
            count+=1
    print(count,answer)
cs

문제 링크:

https://www.acmicpc.net/problem/2312

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1309. 동물원  (0) 2019.08.05
[BOJ]5430. AC  (0) 2019.08.04
[BOJ]15649. N과M(1),(2)  (0) 2019.08.02
[BOJ]1009. 분산처리  (0) 2019.08.01
[Programmers]Lv 3.배달  (3) 2019.07.31

문제:

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

입력:

첫째 줄에 N이 주어진다. (0<=N<=500)

출력:

첫째 줄에 구한 0의 개수를 출력한다.

풀이 방법:

뒷자리에 0이 생기기 위해서는 10을 곱해야 한다. 따라서 N! 중에서 0이 생기는 경우는 크게 두가지가 있다.

1. 10을 곱하는 경우
2. 5의 배수를 곱하는 경우

1번의 경우에는 0이 생기는 것이 자명하므로 설명을 생략한다. 2번의 경우에는 5의 배수의 값과 짝수를 곱하면 10이 생기게 된다. (2 x 5= 10)
즉 이 두경우를 합쳐서 1<=i <=N 인 i에 대해서 5로 나누어떨어질 경우 count를 1 더해주면 된다. 하지만 이 중에는 25와 같이 5의 배수가 두개인 경우도 있으므로 while문을 사용하도록 한다.

1
2
3
4
5
6
7
8
9
10
a=int(input())
answer=0
for i in range(1,a+1):
    while True:
        if i%5==0:
            answer+=1
            i/=5
        else:
            break
print(answer)
cs



'Algorithm > Python' 카테고리의 다른 글

[BOJ]2591. 이항 쇼다운  (0) 2019.05.12
[BOJ]2407. 조합  (0) 2019.05.11
[BOJ]11051. 이항 계수 2  (0) 2019.05.09
[BOJ]11050. 이항 계수 1  (0) 2019.05.08
[BOJ]11866. 조세퍼스 문제0  (0) 2019.05.07

+ Recent posts