from math import cos

#Exercice 3
for i in range(1,101):
    print(i**2)

#pairs
for i in range(2,101,2):
    print(i**2)

#impairs
for i in range(1,101,2):
    print(i**2)



#Exercice 4.1
for a in range(1,10):
    for b in range(1,10):
        print(a,b,a*b)

for b in range(1,10):
    for a in range(1,10):
        print(a,b,a*b)

#Exercice 4.1
for a in range(1,10):
    for b in range(a,10):
        print(a,b,a*b)


#Exercice 5
n = 0
while 3**n <= 123456789 :
    n += 1
print(n)

#Exercice 6.1
somme = 1 #On initialise avec le premier terme
for i in range(2,11) : #On commence donc la somme au deuxième terme
    somme += i**i
print(somme)

#Exercice 6.2
somme = 0
for i in range(1,11) :
    for j in range(i,11) :
        somme += i**j
print(somme)

#Exercice 7.1
i_min = 0        #Entier associé au minimum du cosinus (à actualiser)
mini = cos(0)    #Valeur minimale du cosinus (à actualiser)
for i in range(1,100) :
    if cos(i) < mini : #Si on trouve un entier qui donne un cosinus plus petit, on met à jour
        i_min = i
        mini = cos(i)
print(i_min)

#Exercice 7.2
mini = float("inf") #Valeur minimale du cosinus (à actualiser)
for k in range(100) :
    for l in range(k,100) :
        if cos(k)*l < mini : #Si on trouve un couple d'entiers qui donne un cosinus plus petit, on met à jour
            mini = cos(cos(k)*l)
            k_mini = k
            l_mini = l

print(k_mini, l_mini)


#Exercice 8
def nbdivi(n):

    compteur = 0
    for i in range(2,n):
        if n%i == 0 :
            compteur += 1

    return compteur


#Exercice 9.1
un = 2 #Valeur de u0
for k in range(10):
    un = 0.5*(un + 2/un)
print(un)

#Exercice 9.2
n = 0
un = 2 #Valeur de u0

while un > 1.415 :
    n += 1
    un = 0.5*(un + 2/un)

print(n,un)

#Exercice 10
for a in range (1,101):
    for b in range(a,101):
        for c in range(b,101):
            if a**2 + b**2 == c**2 :
                print(a,b,c)

#Exercice 11

def valu(a,b) :
    n = 0
    while b%(a**n) == 0 : #On teste si a**n divise b
        n += 1

    return n-1 #n ne fonctionne pas car il a provoqué l'arrêt de la boucle while


#Exercice 12.1
def pgcd(a, b):
    d = a #On part de a car le PGCD est <= à a et b
    while a % d != 0 or b % d != 0:
        d = d - 1
    return d

#Exercice 12.2
def ppcm(a, b):
    m = b #On part de b et on calcule tous ses multiples
    while m % a != 0:
        m = m + b
    return m


#Exercice 13
def facto(n):
    resultat = 1
    k = 2
    while k <= n:
        resultat = resultat * k
        k = k + 1
    return resultat



