getflag
getflag

Reputation: 53

First 100 prime numbers

I know there are a number of ways to find the first 100 prime numbers but please help me in my approach. I find the value of count to be increasing but for some reason the while loop condition doesn't apply:

count = 0

while(count <= 20):
    for i in range(2, 20):
        for j in range(2, i):
            if i < j:
                print("The number",i,"is prime")
            elif i % j == 0:
                break
        else:
            print("The number",i,"is prime")
            count = count + 1
            print(count)

Upvotes: 0

Views: 18743

Answers (5)

HARDEEP SINGH
HARDEEP SINGH

Reputation: 1

i=1
n=2
prime_list=[]
while(i<100):
    prime=True
    for j in range(2,n//2+1):
        if n%j==0:
            prime=False
    if(prime==True):
        prime_list.append(n)
        i=i+1
    n=n+1

Upvotes: 0

Nikhil Jagtap
Nikhil Jagtap

Reputation: 1

prime_count=0
n=1
while(True):
    count=0
    i=2
    n+=1
    while(i<=n):
        if(n==i):
            print(n)
            prime_count+=1
        elif(n%i==0):
            break
        i+=1
    if(prime_count==100):
        break

Upvotes: 0

ANIKET LOKHANDE
ANIKET LOKHANDE

Reputation: 11

This is a more simpler code. We have looped all the numbers from 0 to the number until we have printed 100 prime numbers.

n=0
i=0
while n<100:
    i+=1
    count=1
    for j in range(2,i):
        if i%j==0:
            count=0
            break
    
    if count==1:
        print(i,end=' ')
        n+=1

    

Upvotes: 1

user6851498
user6851498

Reputation:

If one is looking for a mix of efficiency and simple code, Numpy is worth a try. With some fancy indexing, the following code does the job of implementing the sieve of Eratosthenes.

import numpy as np

ns = np.array(range(2,N))
primes = []
last_prime=2
while last_prime:
    primes.append(last_prime)
    ns = ns[ns%last_prime != 0]
    last_prime = ns[0] if len(ns) > 0 else None
print(primes[:100])

Then just adjust N until you do have 100 primes. A good first guess is something in the order of 100*log(100) ~ 460 (coming from the prime number theorem). This will give 88 primes. Increasing N to the value of 600, you will have enough primes.

Upvotes: 0

jfs
jfs

Reputation: 414585

You could use Sieve of Eratosthenes to find the first n prime numbers:

def primes_upto(limit):
    prime = [True] * limit
    for n in range(2, limit):
        if prime[n]:
            yield n # n is a prime
            for c in range(n*n, limit, n):
                prime[c] = False # mark composites

To get the first 100 primes:

>>> list(primes_upto(542))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, ... ,
 499, 503, 509, 521, 523, 541]

To find the first n primes, you could estimate n-th prime (to pass the upper bound as the limit) or use an infinite prime number generator and get as many numbers as you need e.g., using list(itertools.islice(gen, 100)).

Upvotes: 6

Related Questions