당니이
다은이의 컴퓨터 공부
당니이
전체 방문자
오늘
어제
  • 분류 전체보기 (140)
    • Achieved 👩🏻 (14)
      • 생각들 (2)
      • TIL (6)
      • Trial and Error (1)
      • Inspiration ✨ (0)
      • 미국 박사 준비 🎓 (1)
    • Computer Vision💖 (39)
      • Basic (9)
      • Video (5)
      • Continual Learning (7)
      • Generative model (2)
      • Domain (DA & DG) (5)
      • Multimodal (8)
      • Multitask Learning (1)
      • Segmentation (1)
      • Colorization (1)
    • RL 🤖 (4)
    • Autonomous Driving 🚙 (11)
      • Geometry (4)
      • LiDAR 3D Detection (1)
      • Trajectory prediction (2)
      • Lane Detection (1)
      • HDmap (3)
    • Linux (15)
    • PyTorch👩🏻‍💻 (10)
    • Linear Algebra (2)
    • Python (5)
    • NLP (11)
      • Article 📑 (1)
    • Algorithms 💻 (22)
      • Basic (8)
      • BAEKJOON (8)
      • Programmers (2)
    • ML (1)
      • 통계적 머신러닝(20-2) (1)
    • SQL (3)
    • 기초금융 💵 (1)

블로그 메뉴

  • 홈
  • About me

공지사항

인기 글

태그

  • 리눅스
  • CL
  • Linux
  • Incremental Learning
  • 알고리즘
  • conda
  • pytorch
  • dfs
  • CV
  • 코딩테스트
  • domain generalization
  • 백준
  • NLP
  • 자료구조
  • 백트래킹
  • domain adaptation
  • LLM
  • Python
  • til
  • continual learning

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
당니이

다은이의 컴퓨터 공부

Algorithms 💻

[Project Euler] Problem 1 ~ 7번 알고리즘 풀이

2021. 2. 24. 00:17
반응형

1. 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면?

s = 0
for i in range(1000):
    if i%3==0 or i%5==0:
        s = s + i
    else:
        pass
    
print(s)

2. 4백만 이하의 짝수 값을 갖는 모든 피보나치 항을 더하면 ?

n1 = 0
n2 = 1
n3 = n1+n2
result = 0

while n3<=4000000:
  n3 = n1+n2
  # print(n3)
  n1 = n2
  n2 = n3

  if n3 % 2==0:
    result += n3

print('result_sum : ', result)

3. 600851475143의 소인수 중에서 가장 큰 수

a = 600851475143 
i = 2 
num = []
while (i<=a):
    if a%i==0:  
        num.append(i)  # 소인수 모음 
        a = a//i   # 이게 열쇠이다!
    i = i+1
print(max(num))

 

5.  1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수 (최소공배수)

for i in range(20,1000000000,20):    # 20씩 뛰면서 진행
  for a in range(1,20):
    if i%a != 0 :   # 나머지가 0이 아니면 멈추고 다음수로, 0이면 a 바꿔가면서 계속 진행
      break
    if a >= 19:
      print (i) 

6.  1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?

num = 1
a = 0  # 합의 제곱
b = 0  # 제곱의 합
while (num<=100):
  a += num
  b+= num**2
  num += 1    # 합의제곱
print('제곱의 합과 합의 제곱의 차 : ', a**2 - b)

 


7. 10001번째의 소수 구하기

num = 1   
i = 1
# 우선 True로 설정
while (num<=10002):
    i +=1 
    result = True  # True, False 이용
    for j in range(2, i):
      if i % j ==0:
        result = False
        break
        
    if result == True:
      num+=1
      if num == 10002:
        print('10001번째 소수 : ', i)   # 51초정도 걸림
cf) 에리토스테네스의 체 : 소수를 구하는 알고리즘

- 찾고자 하는 자연수를 배열로 나열하여 그 중에 소수의 배수들을 전부 지워나가면 남는 수가 소수가 됨 
- 시간복잡도를 매우 줄일 수 있음

코드 적용!

n = 104743
a = [False, False] + [True] * (n-1)   # False 두번, True가 n-1번 등장
소수 = []

for i in range(2, n+1):
  if a[i] == True:
    소수.append(i)  # 우선 소수로 추가
    
    for j in range(2*i, n+1, i):   # 소수의 배수를 지워간다 
      a[j] = False

print(소수)
print(len(소수))

 

반응형
저작자표시 (새창열림)

'Algorithms 💻' 카테고리의 다른 글

자주 쓰이는 기본적인 정규표현식(Regex) 정리  (0) 2021.04.19
[알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환)  (0) 2020.12.30
[알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기)  (0) 2020.12.30
    'Algorithms 💻' 카테고리의 다른 글
    • 자주 쓰이는 기본적인 정규표현식(Regex) 정리
    • [알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환)
    • [알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기)
    당니이
    당니이
    씩씩하게 공부하기 📚💻

    티스토리툴바