[TIL] 정글 96일차 - 나만의 무기

신승준·2022년 7월 3일
0

알고리즘

백준

  • 수학
    • 9020 골드바흐의 추측
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

t = int(input())

visited = [0] * 10001

def check(x):
    for i in range(2, x):
        if x % i == 0:
            return False
            
    return True

for i in range(2, 101):
    if check(i):
        for j in range(i * 2, 10001, i):
            visited[j] = 1
            
for _ in range(t):
    num = int(input())
    
    mid = num // 2
    left = mid
    right = mid
    
    while left > 1 and right < 10001:
        if visited[left] == 0 and visited[right] == 0:
            if left + right == num:
                print(left, right)
                break
            
        else:
            left -= 1
            right += 1
  • 수학
    • 11653 소인수분해
    • 만약 divide = 2로 더 이상 나머지가 0이 되도록 나뉘어질 수 없다면 4, 6, 8일 때도 나뉘어질 수 없다.
    • 마찬가지로 divide = 3으로 더 이상 나머지가 0이 되도록 나뉘어질 수 없다면 6, 9, 12일 때도 나뉘어질 수 없다.
    • 따라서 2부터 1씩 늘려간다면 굳이 for문을 1번 더 돌아서 소수인지 판별할 이유가 없다. 소수일 때만 if문에 걸려 나누기에 들어간다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

n = int(input())
divide = 2

# <시간 초과>
# def check(x):
#     for i in range(2, int(x**(1/2))):
#         if x % i == 0:
#             return False
            
#     return True

# while n != 1:
#     if n % divide == 0:
#         n //= divide
#         print(divide)
        
#     else:
#         divide += 1
#         while not check(divide):
#             divide += 1

while n != 1:
    if n % divide == 0:
        n //= divide
        
        print(divide)
        
    else:
        divide += 1

언어

JavaScript

React


궁금한 점

하루를 마치고

profile
메타몽 닮음 :) email: alohajune22@gmail.com

0개의 댓글