Article épinglé

Affichage des articles dont le libellé est maths. Afficher tous les articles
Affichage des articles dont le libellé est maths. Afficher tous les articles

vendredi 10 mars 2023

Python et nombre premier


Script didactique ;)

n=25
for i in range (n):
    div=n%(i+1)
    print(i+1,n/(i+1),div)
print("------------------")

# premier si uniquement 2 diviseurs
# idee de compter les diviseurs dans compt
n=25
compt=0
for i in range (n):
    div=n%(i+1)
    if div==0:
        compt=compt+1
print(i+1,div,compt)
#
n=11
compt=0
for i in range (n):
    div=n%(i+1)
    if div==0:
        compt=compt+1
print(i+1,div,compt)
print("**************")

### final
# si compt == 2 alors premier!
n=int(input("saisir un entier - n="))
compt=0
for i in range (n):
    div=n%(i+1)
    if div==0:
        compt=compt+1
if compt == 2:
    print(n," est un nombre premier!")
else:
    print(n," n'est pas un nombre premier!")
print("###################")


### script dans une fonction
# pour les maths
def premier(n):
    compt=0
    for i in range (n):
        div=n%(i+1)
        if div==0:
            compt=compt+1
    if compt == 2:
        print(n," est un nombre premier!")
    else:
        print(n," n'est pas un nombre premier!")

lundi 21 mars 2022

Triangle de Pascal - le retour

Une autre idée pour faire suite à ceci

https://ptroulet.blogspot.com/2020/11/python-triangle-de-pascal.html

Script

pascal=[[1,0]]

for j in range(5):
    ligne=[1]
    for i in range (len(pascal)):
       ligne.append(pascal[j][i]+pascal[j][i+1])
    
    ligne.append(0)
    pascal.append(ligne)
 
print(pascal) 

mercredi 19 janvier 2022

Stats et paradoxe

Le paradoxe de Simpson

A voir. À un moment il est question de l'intérêt du redoublement pour un élève, et à la fin de la vidéo il est présenté le protocole pour une étude prospective (étude qui n'aura jamais lieu - Vous seriez d'accord, vous, pour faire parti du groupe à qui on propose de redoubler?!!)

Les études présentées ici sont fictives mais inspirées de cas réels, apprenez-en plus dans ce billet sur mon blog : https://scienceetonnante.com/2013/04/29/le-paradoxe-de-simpson/


 

dimanche 31 octobre 2021

vendredi 5 février 2021

Tirage avec remise en python, fonction choices

Fonctionnement de choices

Tout est là:


#debut du script
import random
#mise en place des categories, ici mon ensemble contient soit des "chomeur", soit des "non chomeur", soit des "rentier"
maliste = ["chomeur", "non chomeur", "rentier"]


'''
ceci est une liste memorisee dans tirage
elle comprendra 10 elements tires au hasard avec remise dans un sac comprenant 33 chomeur, 70 non chomeur et 10 rentier)
'''
tirage=random.choices(maliste, weights = [33, 70,10], k = 10)
print(tirage, len(tirage))
#fin du script

samedi 19 septembre 2020

Visualisation de la densité des nombres premiers

Amélioration du script sur les nombres premiers, l'idée est de les visualiser par des points avec Turtle. Les points sont dessinés verticalement par tranche de 100.


En comptant bien les points de la première verticale de gauche on retrouve :
1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, ....

Script

from turtle import *

#quete des nombres premiers
borne =10000
premier=[1]
j=1
while j<=borne:
    nbre=j
    i=1
    list=[]

    while i<=nbre:
        if nbre%i ==0:
            
            list.append(i)
            i=i+1
        else:
            i=i+1
   
    if len(list)==2:
        premier.append(nbre)
    
    j=j+1
print (premier)

#dessin la nouveauté
x=0
xmax=max(premier)/100
ymax=100
setworldcoordinates(0, 0, xmax, ymax+10)
penup()
for i in range(len(premier)):
    if premier[i]>100*(x+1):
        x=x+1
        write(x*100)
    goto(x,premier[i]-100*x)
    #write(premier[i])
    dot()

dimanche 30 août 2020

Tirage sans remise de k n° parmis N avec m manches




import numpy as np
import matplotlib.pyplot as plt
def tirage_sans_remise(N,k):
    # cette fonction tire k numeros sans remise
    # parmi N numeros
    liste=[]
    tirage=[]
    for i in range (N):
        liste.append(i+1)
   
    for i in range(k):
        sel=np.random.choice(liste)
        tirage.append(sel)
        liste.remove(sel)
    return tirage
        
#nombre de n° possibles
f=6
# n tirage pour une manche
n=3
# nbre de manches = m
m=5

ntirages=[]
for t in range(m):
    ntirages.append(tirage_sans_remise(f,n))
print("Liste des ",m," manches")
print(ntirages)


tot=[]
for i in range (f):
    s=0
    for j in range (m):
        s=s+ntirages[j].count(i+1)    
    tot.append(s)
print ("Bilan des sorties des tirages pour toutes les manches")
print(tot)

# gaphique
plt.bar(range(1,f+1),tot)
plt.title("Cumul des tirages")
plt.xlabel("N° possibles(variable f)")
plt.ylabel("Total des sorties")
plt.show()

mardi 3 septembre 2019

Script python - Approche de la racine carrée d'un nombre

http://www.irem.univ-mrs.fr/IMG/pdf/algo2011-heron.pdf

Présentation du principe

En lisant le document de M. Clément, il faut constater que si l'on prend un carré de surface S alors son côté est racine(S)
Et donc par calculs successif, on peut encadrer cette valeur

Algorigramme

Saisir la valeur de la surface S
Initialiser x=S 
Initialiser y=1
(x et y sont les côtés d'un rectangle)
Tant que val absolue de x-y > precision recherchée
    A finir

Script (réalisation Anthony GALLARD)

#but de l'activité : encadrement du radical d'un nombre

S=int(input("Saisir la valeur de l'entier dont vous voulez approcher la racine carrée : S= "))
x1=1
y1=2
p=3

while p>10**(-6):
    x1=(x1+y1)/2
    y1=S/x1

#précision de l'encadrement

    p=abs(x1-y1)

#afficher l'encadrement de S
    
precision=str(p)

print("racine carrée de S est compris entre \n", y1,"\n et \n", x1, " \n avec une précision de 10 puissance -",precision[-2:])

jeudi 18 juillet 2019

mardi 11 juin 2019

Recherche des diviseurs d'un nombre entier quelconque


Présentation

Recherche des diviseurs d'un nombre entier quelconque. L'idée est de prendre un nombre quelconque puis de voir s'il se divise par 2 sans reste, si oui alors faire la division et recommencer avec le résultat de cette division sinon tester s'il se divise par 3...

Script fonctionnant sous Python

#diviseur d'un nombre
nbre=int(input("Saisir un nombre entier? \nNbre= "))
nbreini=nbre
i=2
diviseur=[1]
while i<=nbre:
    if nbre%i ==0:
     
        print (i,'est un diviseur de ',nbre)
        diviseur.append(i)
        nbre=nbre/i
     
    else:
        i=i+1
print("Les diviseurs de ",nbreini," sont ",diviseur)

Test

Saisir un nombre entier?
Nbre= 123045
3 est un diviseur de  123045
5 est un diviseur de  41015.0
13 est un diviseur de  8203.0
631 est un diviseur de  631.0
Les diviseurs de  123045  sont  [1, 3, 5, 13, 631]
---------------------
Saisir un nombre entier? 
Nbre= 120
2 est un diviseur de  120
2 est un diviseur de  60.0
2 est un diviseur de  30.0
3 est un diviseur de  15.0
5 est un diviseur de  5.0
Les diviseurs de  120  sont  [1, 2, 2, 2, 3, 5]

jeudi 6 juin 2019

Python et quête n°3 - PGCD et algorithme d'Euclide

Vidéo montrant comment utiliser l'algorithme d'Euclide afin de déterminer le plus grand commun diviseur.

Script fonctionnant sous Python

# PGCD
#saisie des 2 nbres
a=int(input("Saisir le premier nombre entier: "))
b=int(input("Saisir le second nombre entier: "))


# classement et definition de gnbre et pnbre
if a<b:
    gnbre=b
    pnbre=a

else:
    gnbre=a
    pnbre=b

# declaration des listes pour garder une trace
dividende=[]
diviseur=[]
quotient=[]
reste=[]


# initialisation
i=0
r=1
dividende.append(gnbre)
diviseur.append(pnbre)


# boucle

while r!=0:
    q=dividende[i]//diviseur[i]
    r=dividende[i]%diviseur[i]
 
    quotient.append(q)
    reste.append(r)

    dividende.append(diviseur[i])
    diviseur.append(r)
    i=i+1


# Affichage
print("Le PGCD entre ",a," et ",b, "est donc ",dividende[-1])


# Pour  vérif, affichage des diviseurs de a et de b
i=2
aini=a
diviseura=[1]

while i<=a:
    if a%i ==0:
        diviseura.append(i)
        a=a/i

    else:
        i=i+1

print("Les diviseurs de ",aini," sont ",diviseura)


i=2
bini=b
diviseurb=[1]

while i<=b:
    if b%i ==0:
        diviseurb.append(i)
        b=b/i

    else:
        i=i+1

print("Les diviseurs de ",bini," sont ",diviseurb)

Test

>>> %Run PGCD.py
Saisir le premier nombre entier: 123405
Saisir le second nombre entier: 12045
Le PGCD entre  123405  et  12045 est donc  15
Les diviseurs de  123405  sont  [1, 3, 5, 19, 433]
Les diviseurs de  12045  sont  [1, 3, 5, 11, 73]