# -*- coding: utf-8 -*-
"""
Created on Fri Oct 28 09:47:30 2022

@author: 2017
"""


n=93757 #  Et naturlig tall.  Vi skal sjekke om tallet er et primtall eller ikke. 


flag=True  #En sanhetsverdi, som vi oppdaterer til falsk hvis n ikke er et primtall. 

M=1

for m in range(2, 1+ int(n**(0.5))):  #Vi behøver bare sjekke om n er delelig med tall mindre enn eller lik kvadratroten til n
    #print( m)
    if n % m == 0:    #Sjekker om m deler n
       flag = False   #Hvis n er delelig med et mindre tall endrer vi flagget til falsk.
       M=m            #Husker på hvilke tall som delte n.
       break  #Det er ikkje behov for å fortsette løkken så den avsluttes. 

K=n//M  #Regner ut kvotienten.  Hvis n er et primtall gir dette bare n selv.


if flag == True:  #n har ingen divisorer, og er derfor et primtall.
    print(f'Det naturlige tallet {n} er et primtall')    
else:    
    print(f'Det naturlige tallet {n}={M}*{K} er ikke et primtall') 
    # Hvis n ikke er et primtall skriver vi det opp som et produkt med sin minste primtallsdivisor.
    
    
    #OPPGAVE:  Lag en liste over alle primtall mindre enn eller lik et gitt tall.
    #Tell opp antall primtall mindre enn eller lik et gitt tall. 
    #Plot antall primtall pi(n) mindre enn eller lik n som en funksjon av n. 
    
    
    #Forslag til løsninger endenfor.
    
    
    
   # -----------------------------------------------------------------
   
def prime(n):     #Vi lager en funksjon som sjekker om et tall er et primtall og gir ut en sannhetsverdi.
    flag=True
    for m in range(2, 1+ int(n**(0.5))):  #Vi behøver bare sjekke om n er delelig med tall mindre enn eller lik kvadratroten til n
    
       if n % m == 0:    #Sjekker om m deler n
          flag = False   #Hvis n er delelig med et mindre tall endrer vi flagget til falsk.
          break 
    return flag 

#print(prime(15))  #tester

# =============================================================================
# N=911
# 
# for n in range(2, N+1):  #Skriver opp alle primtall mindre enn eller lik N
#     if prime(n)==True:
#         print(n, end=' ')
#         
#         
# =============================================================================
# =============================================================================
#         
#     #Vi lager en funksjon som teller opp antall primtall mindre enn eller lik N
# 
# N=911   # Gjør dere N stor vil maskinen bruke svært lang tid på beregningene. 
# def PI(N):
#     PI = 0
#     for n in range(2, N+1): 
#         n = int(n)
#         if prime(n)==True:
#          PI += 1 #legger til 1 til PI for hvert primtall.
#         # print(PI) #tester
#     return PI     
# 
#     
# #print(PI(N))
# 
# import numpy as np
# import matplotlib.pyplot as plt
# 
# heltall = np.arange(1,N,1)
# antallp = np.zeros(N-1)
# for i in range(N-1):    
#     antallp[i] = PI(heltall[i])
# 
# #plt.axis([0,N,0,N])
# plt.xlabel('naturlige tall n')
# plt.ylabel('antall primtall <= n')
# 
# plt.plot(heltall, antallp)
# plt.show()
# =============================================================================

# =============================================================================
# 
# 
# #print(np.log(10))  sjekker at log faktisk betyr natrulig logaritme.
# def noverlog(N):
#     return    N/np.log(N)
#     
# heltall = np.arange(2,N,1)  #unngår verdien 1 som ikke gir mening i funksjonen noverlog
# plt.plot(heltall, noverlog(heltall))
# plt.show()
# 
# =============================================================================
