โ 1850 ์ต๋๊ณต์ฝ์ โ
import math
A,B = map(int, input().split())
ans = ''.join(['1']*math.gcd(A,B))
print(ans)
๐ 1์ ๊ฐ์ A์ B์ ์ต๋๊ณต์ฝ์๋งํผ 1์ด ๋์ด๋์ด ์๋ ์๊ฐ ์ต๋๊ณต์ฝ์. ์ต๋๊ณต์ฝ์ ์ฑ์ง / ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ฌ์ฉํด ์ด๋ฅผ ์ฆ๋ช ํด๋ณด์
โป 1์ด a๊ฐ ์๋ ์์ 1์ด b๊ฐ ์๋ ์์ ์ต๋๊ณต์ฝ์๋ 1์ด gcd(a,b)๊ฐ ์๋ ์ (a≥b)โป
- ์ฆ๋ช -
→ 1์ด a๊ฐ ์๋ ์๋ฅผ $S_a$, 1์ด b๊ฐ ์๋ ์๋ฅผ $S_b$๋ผ๊ณ ํ๋ฉด
$$S_a = \underbrace{111 ... 111}$$
(1์ด a๊ฐ)
$$S_b = \underbrace{111 ... 111}$$
(1์ด b๊ฐ)
→ ์๋์ ๊ฐ์ด 10์ ์ง์์น์ผ๋ก ๋์ดํ ์ ์๋ค.
$$S_a = 10^{a-1} + 10^{a-2} ... + 10^0$$
$$S_b = 10^{b-1} + 10^{b-2} ... + 10^0$$
→ 10^(n-1)๋ก ๊ฐ๋จํ ๋ํ๋ด์๋ฉด
$$S_a = \frac{10^a-1}{9}$$
$$S_b = \frac{10^b-1}{9}$$
→ 9๋ก ๋์์ ๋๋์์ผ๋ฏ๋ก, ์ต๋๊ณต์ฝ์์ ์ฑ์ง์ ์ํด $S_a, S_b$์ ์ต๋๊ณต์ฝ์๋ $10^a-1, 10^b-1$์ ์ต๋๊ณต์ฝ์์ 9๋ฅผ ๋๋ ๊ฒฐ๊ณผ์์ ์ ์ ์๋ค.
→ ์ฆ, gcd($10^a-1$,$10^b-1$)์ ๊ดํด ์์ผ๋ก ํ์ด์ฐ๋ฉด (q >= 1, 0 <= r < b) (a=bq+r)
$$gcd(10^a-1,10^b-1)$$
$$=gcd(10^{qb+r}-10^r+10^r-1,10^b-1)$$
$$=gcd(10^r(10^{qb}-1)+10^r-1,10^b-1)$$
→ $gcd(A,B) = gcd(A-NB,B)$์ ์ํด
$$=gcd(10^b-1,10^r-1)$$
$$(N = \frac{10^r(10^{ab}-1)}{10^b-1})$$
→ ๋ฐ๋ผ์, $gcd(10^a-1, 10^b-1) = gcd(10^b-1, 10^r-1)$
→ ์ฐ์์ ์ผ๋ก r์ด 0์ด ๋ ๋, ์ฆ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ํด $gcd(10^a-1, 10^b-1) = 10^{gcd(a,b)}-1$
→ ๋ฐ๋ผ์, $S_a, S_b$์ ์ต๋๊ณต์ฝ์๋ $\frac{10^{gcd(a,b)}-1}{9}$
→ ๋ฑ๋น์์ด ํฉ ๊ณต์์ ์ํด
$10^{gcd(a,b)}-1 = (10-1)(10^{gcd(a,b)-1}+10^{gcd(a,b)-2}+...+1)$
→ $S_a, S_b$์ ์ต๋๊ณต์ฝ์๋ ์ต์ข ์ ์ผ๋ก
$$10^{gcd(a,b)-1}+10^{gcd(a,b)-2}+...+1$$
→ ์ด๋ 1์ด ์ด $gcd(a,b)$๊ฐ ์๋ ์์ด๋ค. ์ฆ๋ช ๋!
โ 17087 ์จ๋ฐ๊ผญ์ง 6 โ
import sys
input=sys.stdin.readline
def gcd(a,b):
A,B=max(a,b),min(a,b)
while B>=1:
A,B=B,A%B
return A
N,S=map(int,input().split())
l=[]
for x in input().split():
l.append(abs(S-int(x)))
ans=l[0]
for x in l[1:]:
ans=gcd(ans,x)
print(ans)
๐ ๋ ๊ฐ ์ด์์ ์๋ค์ ์ต๋๊ณต์ฝ์ ๊ตฌํ๊ธฐ
: D ๋ณดํญ๋งํผ ๋์์ ๋ง๋ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ๋์์ ์ฐพ๊ธฐ ์ํด์๋ D๊ฐ ๊ณต์ฝ์. ๊ทผ๋ฐ D์ ์ต๋๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก ์ด๋ ์ต๋๊ณต์ฝ์ ๊ตฌํจ
๐ ๋ ๊ฐ ์ด์์ ์ต๋๊ณต์ฝ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ:
: ์์์ ์ฐจ๋ก๋๋ก ๋ ๊ฐ์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ ๋ค์ ์์์ ์ต๋๊ณต์ฝ์ ๊ตฌํ๊ณ , ๋ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ ๋ค์ ์์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ฉด์ ์ฐ์์ ์ผ๋ก ์ต๋๊ณต์ฝ์๋ฅผ 2๊ฐ ์๋ผ๋ฆฌ ๊ตฌํด ๋๊ฐ๋ฉด ๋จ!
โ 22302 Factorial Factors โ
import sys
input=sys.stdin.readline
sieve = [True]*(100_001)
sieve[0],sieve[1] = False, False
for x in range(2,int(len(sieve)**(1/2))+1):
if sieve[x]:
for y in range(x,len(sieve),x):
sieve[y] = False
sieve[x] = True
primes=[x for x in range(len(sieve)) if sieve[x]]
for _ in range(int(input())):
N=int(input())
ans=[]
for prime in primes:
if prime > N:
break
square=1
while 1:
share=int(N/(prime**square))
if share == 0:
break
else:
ans.extend([prime]*share)
square+=1
print(len(set(ans)),len(ans))
๐ ์ ๋ ฅ๋ฐ์ N์ N! ์์ธ์ ๋ถํด๋ฅผ ์งํํ๋ ๋ฌธ์ . ์ ์ผ ์์ ์์๋ถํฐ ์์์ ์ ๊ณฑ์๋ฅผ N์ ๋๋๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด 5!์ ์์ธ์๋ถํด๋ ๊ณง 1 x 2 x 3 x 4 x 5 ์ด๋ฏ๋ก ์์ 2๋ถํฐ ์์ํด์ int(N/2) + int(N/2**2) + int(N/2**3)์ ๊ฐ์๋ฅผ ๋์ . [prime]*share๋ฅผ list์ update. ๊ทธ ๋ค์ ์์ 3๋ ๋ง์ฐฌ๊ฐ์ง.
โ 9020 ๊ณจ๋๋ฐํ์ ์ถ์ธก โ
๐๐ปโ๏ธ ๊ณจ๋๋ฐํ ์ = 2๋ณด๋ค ํฐ ๋ชจ๋ ์ง์๋ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
๐๐ปโ๏ธ ๊ณจ๋๋ฐํ ํํฐ์ = ์ง์๋ฅผ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ํํ
๐๐ปโ๏ธ ๊ณจ๋๋ฐํ ํํฐ์ ์ ์ถ๋ ฅํ๋ ์ ํ! (๋ ์์์ ์ฐจ์ด๊ฐ ์์ ์)
import sys
input=sys.stdin.readline
def first_goldbach(n):
arr = [True] * n
arr[0]=False
end = int(n**(1/2))
for i in range(2,end+1):
if arr[i-1] == True:
for k in range(i-1,n,i):
arr[k] = False
arr[i-1] = True
for j in range(n//2,0,-1):
if arr[j] == True == arr[(n-2-j)]:
ans = j+1
break
return ans
for _ in range(int(input())):
N=int(input())
a=first_goldbach(N)
print(min(a,N-a),max(a,N-a),sep=' ')
๐๐ปโ๏ธ ์ฌ๋ฌ ์์ด ์กด์ฌํ๋ค๋ฉด, ๋ ์์์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์ ์ ์๋ถํฐ ์ถ๋ ฅํ๋ฏ๋ก, ์ ์๋ก ์ ์ํด ๋ ์ ์ค ํ ๊ฐ์ ์๋ ์ ์ฒด ํฌ๊ธฐ์ ์ ๋ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์,range(n//2,0,-1) ๋ฒ์๋ฅผ ๋์ด ์ฐจ๋ก๋๋ก ๊ณ์ฐ
๐๐ปโ๏ธ ์์ ํ์ ๋ฒ์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์ฌ์ฉ. ๋ ์์ array๊ฐ์ด ๋ชจ๋ True๋ผ๋ฉด ๊ณจ๋๋ฐํ ํํฐ์ ์กฐ๊ฑด ์ถฉ์กฑ! ๋ฐ๋ก ์ถ๋ ฅ
(์ถ๊ฐ - ์ฑ๋ฅ์ ๋ ๋์ผ๋ ค๋ฉด ํ ์คํธ ์ผ์ด์ค์ ์ฃผ์ด์ง n ์ค ์ต๋๊ฐ๋ง ๊ณจ๋ผ ๋จ 1๊ฐ์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ๋ง๋ค์ด ํ์ ํ๋ ๊ฒ ๋ ๋น ๋ฆ)
โ 17103 ๊ณจ๋๋ฐํ ํํฐ์ โ
import sys
input=sys.stdin.readline
#sieve of eratosthenes (size 1_000_000)
sieve=[True]*1_000_001
sieve[0],sieve[1]=False,False
for i in range(2,1_000_001):
if sieve[i] == True:
for j in range(i,1_000_001,i):
sieve[j] = False
sieve[i] = True
for _ in range(int(input())):
N = int(input())
ans = 0
for i in range(2,N//2+1):
if sieve[i] == True and sieve[N-i] == True:
ans += 1
print(ans)
๐๐ปโ๏ธ๋จผ์ ์ต๋๊ฐ ๋ฐฑ๋ง๊น์ง์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ ๋ค(์๊ฐ ํจ์จ์ ์ํด ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ํ ๋ฒ๋ง ์์ฑ), ๊ณจ๋๋ฐํ์ ์ถ์ธก์ ๋ง์กฑํ๋ ๋ ์์๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก, N์ ์ ๋ฐ๊น์ง๋ง ๋๋ฉฐ sieve ์ฒด์ i์ N-i ๋ ์์ด ๊ฐ์ True๋ก ๋์จ๋ค๋ฉด ํฉ์ผ๋ก ์นด์ดํธ
โ 25632 ์์ ๋ถ๋ฅด๊ธฐ ๊ฒ์ โ
import sys
input=sys.stdin.readline
sieve = [True]*(1001)
sieve[0],sieve[1] = False, False
for x in range(2,int(1001**(1/2))+1):
if sieve[x]:
for y in range(x,1001,x):
sieve[y] = False
sieve[x] = True
primes = [x for x in range(len(sieve)) if sieve[x]]
A,B=map(int,input().split())
C,D=map(int,input().split())
yt=[prime for prime in primes if A <= prime <= B]
yj=[prime for prime in primes if C <= prime <= D]
if len(yt)!=len(yj):
if len(yt)>len(yj):
print('yt')
else:
print('yj')
sys.exit()
same = set(yt).intersection(set(yj))
if len(same)%2 == 1:
print('yt')
else:
print('yj')
#####
same = set(yt).intersection(set(yj))
turn = 1
while True:
if turn == 1:
if len(yt) == 0:
print('yj')
break
if len(same) > 0:
discard_elem = list(same)[0]
same.discard(discard_elem)
yt.remove(discard_elem)
yj.remove(discard_elem)
else:
yt.pop()
turn = 0
else: #turn = 0
if len(yj) == 0:
print('yt')
break
if len(same) > 0:
discard_elem = list(same)[0]
same.discard(discard_elem)
yt.remove(discard_elem)
yj.remove(discard_elem)
else:
yj.pop()
turn = 1
๐๐ปโ๏ธ ์ง์ ์๋ฎฌ๋ ์ด์ ์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ / ๊ต์งํฉ ์์์ ๊ฐ์์ ๋ฐ๋ฅธ ๊ฒ์ ์ด๋ก ํ์ ์ผ๋ก ํ ์ ์๋ค.
โ ์ผ๋จ ๊ฐ ๋ฒ์ ๋ด์ ๋๋ช ๊ฐ๊ฐ์ ์์ list ๊ตฌํ๊ธฐ
โก ๋ ๋ง์ ์์๋ฅผ ๊ฐ์ง ์ฌ๋ '์น'
โข ์๋ก ๊ฐ์ง ์์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, ๊ต์งํฉ ์์์ ๊ฐ์๊ฐ ์ง์๋ผ๋ฉด ๋จผ์ ์งํํ ์ฉํ ์น๋ฆฌ / ํ์๋ผ๋ฉด ์ดํ์ ์งํํ ์ ์ง ์น๋ฆฌ
→ ๊ทธ๋ฆฌ๋์ ์ํด ๊ฒ์ ์ด๋ก ์ผ๋ก ๊ฐ ํ๋ ์ด์ด๊ฐ ๋งค ์ํฉ ์ํฉ ์ด๊ธฐ๊ธฐ ์ํด ์ต์ ์ ๋คํ๋ค ํ์ผ๋ฏ๋ก, ๋ฌด์กฐ๊ฑด ๊ต์งํฉ ์์๋ฅผ ์ ํํด์ ์ ๊ฑฐ. ๋ฐ๋ผ์ ๊ต์งํฉ ์์๊ฐ ์ง์๋ผ๋ฉด ๊ต์งํฉ ์์๋ฅผ ๋ค ์์ ๊ณ ๋ ๋ค์ ์ฉํ ์ฐจ๋ก์ด๋ฏ๋ก ์ฉํ ์น๋ฆฌ / ํ์๋ผ๋ฉด ๊ต์งํฉ ์์๋ฅผ ๋ค ์์ ๊ณ ๋ ๋ค์ ์ ์ง ์ฐจ๋ก์ด๋ฏ๋ก ์ ์ง ์น๋ฆฌ
โ 1747 ์์&ํฐ๋ฆฐ๋๋กฌ โ
def get_sieve(l):
sieve = [True]*(l+1)
sieve[0],sieve[1] = False, False
for x in range(2,int(len(sieve)**(1/2))+1):
if sieve[x]:
for y in range(x,len(sieve),x):
sieve[y] = False
sieve[x] = True
return sieve
sieve = get_sieve(1003001)
N=int(input())
for prime in range(len(sieve)):
if str(prime) == str(prime)[::-1] and prime >= N and sieve[prime]:
print(prime)
break
๐๐ปโ๏ธ ๋ฐฑ๋ง์ด๊ณผ์ ์์ ์ค ํฐ๋ฆฐ๋๋กฌ ์ต์๊ฐ์ 1003001์์ ์๊ณ 1003001๊น์ง์ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ๋ง๋ ๋ค์ BF๋ก ๋๋ ค ํฐ๋ฆฐ๋๋กฌ์ด๋ฉด ์ถ๋ ฅํ๊ณ ๋
โ 6588 ๊ณจ๋๋ฐํ์ ์ถ์ธก โ
sieve = [True]*(1_000_001)
sieve[0],sieve[1] = False, False
for x in range(int(len(sieve)**(1/2))+1):
if sieve[x]:
for y in range(2*x,len(sieve),x):
sieve[y] = False
import sys
input=sys.stdin.readline
while 1:
n=int(input())
if n == 0: break
found=False
for i in range(n-3,2,-2): #3~(n-3)
if sieve[i] and sieve[n-i]:
found=True
print(f'{n} = {n-i} + {i}')
break
if not found:
print("Goldbach's conjecture is wrong.")
๐๐ปโ๏ธ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฐ๋ ์๊ฐ์ด๊ณผ์ ์ ์ํด์ผ ํ๋ ๋ฌธ์ . ์ผ๋จ √n๊น์ง๋ง(n์ sieve ์ ์ฒด ํฌ๊ธฐ) ๋๋ฆฌ๊ณ , ๋ด๋ถ for๋ฌธ์ 2*x๋ถํฐ ๋๋ฆฐ๋ค.
๐๐ปโ๏ธ for i in range(n-3,2,-2) ์ฆ ๊ฐ๋ฅ ์์๋ 3 ~ (n-3)๊น์ง๋ง ๊ฐ๋ฅํ๋ฏ๋ก n-3๋ถํฐ 3๊น์ง -2์ step์ผ๋ก ๋๋ฆฐ๋ค. ์์๊ฐ ์กด์ฌํ๋์ง in ์ฐ์ฐ์ ์ฌ์ฉ ์์ด, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด index๋ฅผ ํ์ฉํด if sieve[i] and sieve[n-i]์ธ ์กฐ๊ฑด์ ์ฌ์ฉํด ๋ฌธ์ ์์ ํ๋ณ.
โ 24040 ์์ ์ผ์ดํฌ โ
import sys
input=sys.stdin.readline
for _ in range(int(input())):
N=int(input())
if N%9==0 or N%3==2:
print('TAK')
else:
print('NIE')
๐๐ปโ๏ธ ๋ชจ๋ ๋ณ์ 3k, 3k+1, 3k+2(k๋ 0์ด์์ ์ ์)๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฐ๊ฐ์ ์ผ์ด์ค๋ฅผ ์ดํด๋ณด์
(1) 3k / 3k: ๋์ด๋ 9k^2์ธ 9์ ๋ฐฐ์์ด๊ณ , ๋๋ ๋ 3์ ๋ฐฐ์์ด๋ค.
(2) 3k / 3k +1 ๋์ด๋ 9k^2+3k(3์ ๋ฐฐ์)์ด๊ณ ๋๋ ๋ 3์ ๋ฐฐ์๊ฐ ์๋๋ค.
(3) 3k / 3k + 2 ๋์ด๋ 9k^2+6k(3์ ๋ฐฐ์)์ด๊ณ ๋๋ ๋ 3์ ๋ฐฐ์๊ฐ ์๋๋ค
(4) 3k + 1 / 3k + 1 ๋์ด๋ 9k^2+6k+1(3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 1)์ด๊ณ ๋๋ ๋ 3์ ๋ฐฐ์๊ฐ ์๋๋ค
(5) 3k + 1 / 3k + 2 ๋์ด๋ 9k^2+9k+2์ด๊ณ ๋๋ ๋ 3์ ๋ฐฐ์์ด๋ค. ๋์ด๋ 3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 2์ด๋ค
(6) 3k + 2 / 3k + 2 ๋์ด๋ 9k^2+12k+4(3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 1)์ด๊ณ ๋๋ ๋ 3์ ๋ฐฐ์๊ฐ ์๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ ์ 6๊ฐ์ง๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ (1)๊ณผ (5)๋ง TAK ์ถ๋ ฅ์ ํด๋น. ์ฆ 9์ ๋ฐฐ์์ด๊ฑฐ๋ 3์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 2์ธ uniqueํ ์ผ์ด์ค๋ง ์ํ๋ ๋๋ก ์ผ์ดํฌ์ ๋ฌด๋ฌ๋ฅผ 3๋จ์์ฉ ๋ฐ์ฝํ ์ ์๋ค.
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Set/Map Upper-Intermediate I - 3 Solvedโ (0) | 2023.08.11 |
---|---|
โ Divide & Conquer Upper-Intermediate I - 9 Solvedโ (0) | 2023.03.20 |
โ BFS&DFS Intermediate I - 20 Solvedโ (0) | 2023.02.17 |
โ Combinatorics Intermediate I - 5 Solvedโ (1) | 2023.02.16 |
โ Set/Map Intermediate I - 14 Solvedโ (0) | 2023.02.15 |
๋๊ธ