Informatique/TP3/main.py

97 lines
1.7 KiB
Python
Raw Normal View History

2019-11-23 15:22:53 +01:00
import numpy as np
#EXERCICE 1
#1
def multiple(n):
lst=[]
i=1
while i*7 <= n:
lst.append(i*7)
i+=1
return(lst)
#2
def isprime(n):
s=int(n**.5)
t=True
i=2
while i <= s and t==True:
if n%i == 0:
t=False
i+=1
return(t)
#Cette fonction vérifie qu'aucun des entiers compris entre 2 et sqrt(n) ne sont pas des diviseurs de n.
#Si aucun de ces entiers n'est un diviseur de n, alors n est premier car sqrt(n) est un majorant de l'ensemble des diviseurs de n
#3
def premiers(n):
lst=[2]
i=3
while i <= n:
if isprime(i):
lst.append(i)
i+=2
return lst
#4
def npremiers(n):
lst=[2]
c=1
i=3
while c<n:
if isprime(i):
lst.append(i)
c+=1
i+=2
return lst
#5
def jumeaux(n):
lst=[]
for i in range(2,n):
if isprime(i) and isprime(i+2):
lst.append((i, i+2))
return lst
#6
def fermat():
k=0
while True:
if not isprime(2**(2**k) + 1):
return k
k+=1
#7
def repartition(n):
return len(premiers(n)) * np.log(n)/n
#On peut en conclure que sur les nombres qu'on a pu tester, la conjecture semble vraie.
#Exercice 2
#1
def u(n):
if n==0:
return 1
pre=u(n-1)
return 1/2*(pre + 2/pre)
premiers = lambda n: [u(n) for n in range(n)]
#2
premiers2 = lambda n: [u(n)**2 - 2 for n in range(n)]
# On pourrait. (ici, u(n)**2 tend vers 2, donc u(n) tend vers sqrt(2))
#3
def approx():
un=1
i=0
while abs(un**2 - 2) >= 2*1e-5:
un = 1/2*(un + 2/un)
i+=1
return i
#4
def uq(n, q):
if n==0:
return 1
pre=u(n-1)
return 1/q*(pre + q/pre)