거의 소수

Sirius·2025년 1월 19일
0

처음 생각했던 프로세스

  1. 범위 소수 -> 에라토스테네스의 체 이용해서 소수만 추리기
  2. 체에서 소수인거 골라서 제곱시켜서 체크표시해서 count

문제발생

메모리 초과문제 발생

total=[]
for i in range(2, b+1):
    if field[i]==True:
        n=2
        value=0
        while value<=b:
            value = i**n
            if value not in total and value<=b:
                n+=1
                total.append(value)
            else:
                break
print(len(total))
  1. 중복이 일어날것이라 생각해고 total 배열을 만들었음(X)
    -> 중복이 일어나지 않음(몇개 예시로 써보면 감옴...)
  2. 따라서 그냥 count만 하면됨

해결

count=0
for i in range(2, b+1):
    if field[i]==True:
        value= i*i
        while value<=b:
            if value >= a:
            	count+=1
            value *=i

추가로 고민해본것

파이썬은 int형의 오버플로우가 나지 않는다.. 그러나 다른 언어는 내가 자료형을 직접 정해서 선언해야함 이때 N제곱한 것이 int의 범위를 초과한다면...?
오버플로우가 날것이다 아마도...
어떻게 해결해야 할까?

total=0
for i in range(2, len(field)):
    if field[i]==True:
        temp = i
        while i<= b/temp:
            if i >= a/temp:
                total+=1
            temp = temp*i
  • 해결방안

    범위의 양쪽을 나눠준다....
    ex> a<x<b에서 x의 2의 범위를 원하면 a와 b에 x를 나누어 주어서 이 범위에 맞는지 확인하는 것...
    x의 3의 범위는 a/x < x< b/x에서 또다시 a/x/x < x < b/x/x가 만족하는지 확인하고 이런식...

0개의 댓글