1

I'm trying to find prime numbers between any two random numbers.

Firstly, I have written the code like:

m,n = map(int, raw_input().split())
for i in range(m, n+1):
    for j in range(2, i):
        if i%j == 0:
            break
    else:
        print i,

Now for test case suppose I enter 2, 30 then it prints

2 3 5 7 11 13 17 19 23 29

Now analyzing, we don't need to loop till "i" in second loop rather we can do same by looping till i/2, then I changed the code as:

m,n = map(int, raw_input().split())
for i in range(m, n+1):
    for j in range(2, int(i/2)+1):
        if i%j == 0:
            break
    else:
        print i,

Then the result is same as above while we looped till i/2 in second loop.

Now, I'm trying to use the Sieve of Eratosthenes method to print the prime numbers and I used the code as:

m,n = map(int, raw_input().split())
for i in range(m, n+1):
    sqrt_num = int(n**(0.5))
    for j in range(2, sqrt_num+1):
        if i%j == 0:
            break
    else:
        print i,

but it prints

7 11 13 17 19 23 29

for the same input.

Please help me to understand what I am doing wrong. And how I can accomplish the same using this method.

quamrana
  • 37,849
  • 12
  • 53
  • 71
Ashvini Maurya
  • 493
  • 1
  • 7
  • 13

2 Answers2

2

Your inner loop used to loop up until i-1 or i/2. This inner loop was short when i was small, and longer when i got larger.

Now, your inner loop goes up to sqrt_num, which is a constant computed from n. Difference in behavior.

Consider i = 3, the inner loop runs from j = 2 to j = 5, and will find a case where i%j == 0 ... specifically, when j == 3.


To be clear: the problem is "sqrt_num, which is a constant". Change it to the square root of the outer index, i.

    sqrt_num = int(i**(0.5))
AJNeufeld
  • 8,526
  • 1
  • 25
  • 44
0

start = int(input('enter starting point of interval:'))

end = int(input('enter ending point of interval:'))

teap=[]

for i in range (start,end):

if i>1:
    for j in range(2,i):
        if i%j==0:
            break
    else:
        teap.append(i)

chunk_size = 10

chunked_list = [teap[i:i+chunk_size] for i in range(0, len(teap), chunk_size)]

print(chunked_list)