Polynôme d'Euler et nombre premier (Matlab)
Bonjour,
le polynôme d'Euler $X^2+X+41$ pour $X$ de 0 à 40 prend des nombres premiers:[41, 43, 47, 53, 61, 71, 83, 97, 113, 131, 151, 173, 197, 223, 251, 281, 313, 347, 383, 421, 461, 503, 547, 593, 641, 691, 743, 797, 853, 911, 971, 1033, 1097, 1163, 1231, 1301, 1373, 1447, 1523] au 41 eme valeur on a $1601=41^2$ qui n'est pas premier.
Je fais un programme Matlab.
Merci en avance.
le polynôme d'Euler $X^2+X+41$ pour $X$ de 0 à 40 prend des nombres premiers:[41, 43, 47, 53, 61, 71, 83, 97, 113, 131, 151, 173, 197, 223, 251, 281, 313, 347, 383, 421, 461, 503, 547, 593, 641, 691, 743, 797, 853, 911, 971, 1033, 1097, 1163, 1231, 1301, 1373, 1447, 1523] au 41 eme valeur on a $1601=41^2$ qui n'est pas premier.
Je fais un programme Matlab.
Variable q,cp, i: entiers Debut Ecrire ('veuiller entrer les valeurs de q") Lire(q) P<---- X*X+X+q cp<----0 Pour i allant de 0à q-2 faire si q mod i=0 alors cp<---- 1 Sinon P(i) mod q= fin si Ecrire ("P(i) est premier") Finça ne marche pas, peut-être c'est au niveau du nombre premier.
Merci en avance.
Réponses
-
Bonjour,
Ce que tu as écrit n'est pas du Matlab. Montre nous du Matlab.
Cordialement,
Rescassol -
Personnellement je suis plus Scilab que Matlab, mais c'est pratiquement la même chose; il suffit de construire une matrice (n,3) avec (i, nombre, modulo), puis de chercher les termes non nuls dans la colonne 3 avec "find" (grâce à la vectorisation, aucune boucle n'est nécessaire et il suffit de quelques lignes).
Paul2. 47. 1. 3. 53. 2. 4. 61. 1. 5. 71. 1. 6. 83. 5. 7. 97. 6. 8. 113. 1. 9. 131. 5. 10. 151. 1. 11. 173. 8. 12. 197. 5. 13. 223. 2. 14. 251. 13. 15. 281. 11. 16. 313. 9. 17. 347. 7. 18. 383. 5. 19. 421. 3. 20. 461. 1. 21. 503. 20. 22. 547. 19. 23. 593. 18. 24. 641. 17. 25. 691. 16. 26. 743. 15. 27. 797. 14. 28. 853. 13. 29. 911. 12. 30. 971. 11. 31. 1033. 10. 32. 1097. 9. 33. 1163. 8. 34. 1231. 7. 35. 1301. 6. 36. 1373. 5. 37. 1447. 4. 38. 1523. 3. 39. 1601. 2. 40. 1681. 1. 42. 1847. 41. 43. 1933. 41. 44. 2021. 41. 45. 2111. 41. 46. 2203. 41. 47. 2297. 41. 48. 2393. 41. 49. 2491. 41. 50. 2591. 41.
-
Bonjour,
je vois la source de ton programme pour transformer en Matlab (comme vous dites que Scilab et Matlab sont très proche).
Merci de m'eclaircir comment on construit avec une matrice.
Sdoula. -
Bonsoir,
Tu as dit au début que tu faisais un programme Matlab.
Montre nous le et on te dira où il y a une erreur.
Cordialement,
Rescassol -
Le polynôme est représenté en Matlab par un vecteur ligne contenant la liste des coefficients par ordre de degré décroissant (chose que je n'ai pas fait au debut).
var X: P(X); begin P=[1 1 41] writeln('Les nombres premier P(n) de 1 à 100 :'); for X := 1 to 100 do begin if isPrime(polyval (P, X)) then write(X,', '); end; end;
Le problème ça s'affiche:"parse error near line 5 of file /web/com/1556396021_121147/main.m syntax error >>> for X = 1 to 5 do" ^
-
Bonjour,
Ton code n'est toujours pas du Matlab, ça ressemble plus à du Pascal.
Cordialement,
Rescassol -
Il y a différentes façons de créer un matrice, mais l'étape fondamentale c'est l'initialisation (l'allocation dynamique est à proscrire car chère et lente); ensuite tu remplis les cellules.
n = 50; A = zeros(n,3);
L'idée en Matlab/Scilab, c'est de travailler sur des matrices -
Bonjour,
Voilà quelque chose qui est correct en Matlab, et qui ressemble peut-être plus à ce que tu cherches:P=[1 1 41]; T=[]; disp('Les nombres premier P(n) de 1 à 100 :') for X=1:100 if isprime(polyval(P,X)) T=[T X]; end end disp(T)
Cordialement,
Rescassol
Edit: Au passage, $41^2=1681$ et non $1601$. -
Merci, apres execusion on trouve
Les nombres premier P(n) de 1 à 100 :
Columns 1 through 13:
1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 14 through 26:
14 15 16 17 18 19 20 21 22 23 24 25 26
Columns 27 through 39:
27 28 29 30 31 32 33 34 35 36 37 38 39
Columns 40 through 52:
42 43 45 46 47 48 50 51 52 53 54 55 57
Columns 53 through 65:
58 59 60 61 62 63 64 66 67 68 69 70 71
Columns 66 through 78:
72 73 74 75 77 78 79 80 83 85 86 88 90
Columns 79 through 86:
92 93 94 95 97 98 99 100
Le probleme , on a pas les nombre premiers d'Euler, peut etre au niveau du l'avant dernier ligne T=[T,X]. -
Bonsoir,
Je n'ai corrigé que l'aspect informatique de ce que tu avais fait.
Pour l'aspect mathématique, à toi de préciser ce que tu veux.
Ton programme initial ne demande pas d'afficher des nombres premiers, ma correction non plus.
Cordialement,
Rescassol -
P=[1 1 41];
T=[];
disp('Les nombres premier P(n) de 1 à 100 :')
for X=1:100
if isprime(polyval(P,X))
T=[T polyval(P,X)];
end
end
disp(T)
J'ai juste changé le X par (polyval(P,X) et j'obtient les image de P premiers (les nombres premiers d'Euler) et on obtient le resultat voulu:
Les nombres premier P(n) de 1 à 100 :
Columns 1 through 10:
43 47 53 61 71 83 97 113 131 151
Columns 11 through 20:
173 197 223 251 281 313 347 383 421 461
Columns 21 through 30:
503 547 593 641 691 743 797 853 911 971
Columns 31 through 40:
1033 1097 1163 1231 1301 1373 1447 1523 1601 1847
Columns 41 through 50:
1933 2111 2203 2297 2393 2591 2693 2797 2903 3011
Columns 51 through 60:
3121 3347 3463 3581 3701 3823 3947 4073 4201 4463
Columns 61 through 70:
4597 4733 4871 5011 5153 5297 5443 5591 5741 6047
Columns 71 through 80:
6203 6361 6521 7013 7351 7523 7873 8231 8597 8783
Columns 81 through 86:
8971 9161 9547 9743 9941 10141
Merci encore.
Sdoula -
c'est un peu hors sujet, mais je trouve dommage de faire appel à l'allocation dynamique de mémoire; dans la cas présent, il est simple d'initialiser la taille de la matrice (et c'est une habitude à prendre quand on traite plusieurs centaines de milliers de lignes voire plusieurs millions).
En Scilab (je ferais la même chose en python par exemple avec Numpy), le code suivant fait le boulot (à l'affichage près):n = 50; x = (1 : n)'; A = zeros(n,3); A(:,1) = x; A(:,2) = x .**2 + x + 41; A(:,3) = modulo(A(:,2),A(:,1)); nombres_premiers = A(find(A(:,3) <> 0),1:2)
Paul -
Pour le fun, en python:
import numpy as np import time n = 1_000_000; t0 = time.time(); x = np.arange(1,n+1); A = np.zeros((n,3), dtype = np.int); A[:,0] = x; A[:,1] = x**2 + x + 41; A[:,2] = np.mod(A[:,1],A[:,0]); nombres_premiers = A[np.where(A[:,2] != 0),0:2]; t1 = time.time() print("Durée: {}".format(t1-t0)); del A; del n; del x;
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres
Qui est en ligne 1
1 Invité