반응형

   문제

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




나누어지는 가장 작은수를 차례대로 출력하면된다.


1
2
3
4
5
6
7
8
9
10
n=int(input())
p=2
 
while n>1:
    if n%p==0:
        n=n//p
        print(p)
        p=2
    else:
        p+=1

cs


이렇게 하면 시간이 매우 오래 걸릴것이다.

여기서 조금 더 빠르게 하기위해선 계속 2로 돌아서 하나씩 확인하는게 아닌

나누어지는 숫자가 나오고 나누어준뒤 그수로 더이상 나누어떨어지지 않을때까지

 나누어주면 조금더 빠를것이라 생각했으나 더느렸다.

같은인자를 여러개 가지고 있는거보다 큰소수를 인자로 가질때가 문제인거 같다.

n을 2부터 1씩 늘려가며  i로 나누어떨어지지 않을때까지 나눈다고 생각했을때 n이 i^2 

보다 작다면 남은수는 소수이며 마지막 인수이다.

이렇게 코드를 짜면 큰 소수사이에 쓸데없이 계산하던 부분이 많이 줄어들것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
n=int(input())
p=2
 
while p*p<=n:
    if n%p==0:
        print(p)
        n//=p
    else:
        p+=1
 
 
if n>1:
    print(n)

cs





반응형

'알고리즘(python) > 수학' 카테고리의 다른 글

[Python]수학3 백준 2981  (0) 2020.01.21
[Python]수학3 백준 2609  (0) 2020.01.20
[Python]수학3 백준 1037  (0) 2020.01.19
[Python]수학3 백준 5086  (0) 2020.01.19
[Python]수학2 백준 1002  (0) 2019.12.22
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기