Un probleme en PHP
Résolu/Fermé
imrane555
Messages postés
255
Date d'inscription
jeudi 29 mai 2014
Statut
Membre
Dernière intervention
26 octobre 2015
-
Modifié par imrane555 le 25/10/2015 à 17:13
imrane555 Messages postés 255 Date d'inscription jeudi 29 mai 2014 Statut Membre Dernière intervention 26 octobre 2015 - 26 oct. 2015 à 09:58
imrane555 Messages postés 255 Date d'inscription jeudi 29 mai 2014 Statut Membre Dernière intervention 26 octobre 2015 - 26 oct. 2015 à 09:58
A voir également:
- Un probleme en PHP
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Fichier php en pdf ✓ - Forum PDF
- Php if plusieurs conditions ✓ - Forum PHP
- -> En php - Forum PHP
3 réponses
jean448
Messages postés
1340
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
26 janvier 2017
237
Modifié par jean448 le 25/10/2015 à 17:27
Modifié par jean448 le 25/10/2015 à 17:27
Salut
Tu ne peut pas diviser par 0 tout simplement, c'est impossible
Etant donné que tu souhaite trouver par toi même, je t'en dit pas plus
--
Tu ne peut pas diviser par 0 tout simplement, c'est impossible
Etant donné que tu souhaite trouver par toi même, je t'en dit pas plus
--
Utilisateur anonyme
25 oct. 2015 à 21:34
25 oct. 2015 à 21:34
Oui c'est absolument possible de trouver la réponse, ne sous-estime surtout pas la puissance de php!
Maintenant, il ne s'agit que d'être logique histoire de ne pas trop encombrer le script de calculs inutiles. On dit que 2520 est le plus petit nombre divisible de 1 à 10 sans reste, alors c'est absurde et incohérent de croire que la réponse se trouvera sous cette base.
Je possède avec moi un échantillon de code que j'ai réalisé pour lequel la seule contrainte - il me semble - est le temps maximal d'exécution. Il est à toi de me dire si tu veux que je le partage! ;)
Maintenant, il ne s'agit que d'être logique histoire de ne pas trop encombrer le script de calculs inutiles. On dit que 2520 est le plus petit nombre divisible de 1 à 10 sans reste, alors c'est absurde et incohérent de croire que la réponse se trouvera sous cette base.
Je possède avec moi un échantillon de code que j'ai réalisé pour lequel la seule contrainte - il me semble - est le temps maximal d'exécution. Il est à toi de me dire si tu veux que je le partage! ;)
jean448
Messages postés
1340
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
26 janvier 2017
237
Modifié par jean448 le 25/10/2015 à 23:22
Modifié par jean448 le 25/10/2015 à 23:22
Je viens de comprendre réellement le problème je me penche dessus !
Je confirme PHP est bien plus puissant que ce l'on peut croire, surtout avec les dernière versions, sont gros problème est d'^tre un langage interprété qui le rend bien lourd pour certaines taches comme celle ci !
EDIT :Réussi quasi instantané pour les nombres de 1 à 10 !
Je confirme PHP est bien plus puissant que ce l'on peut croire, surtout avec les dernière versions, sont gros problème est d'^tre un langage interprété qui le rend bien lourd pour certaines taches comme celle ci !
EDIT :Réussi quasi instantané pour les nombres de 1 à 10 !
Utilisateur anonyme
26 oct. 2015 à 04:42
26 oct. 2015 à 04:42
Attention à ceux qui se cassent la tête, je publie mon algo! ;)
Je ne pouvais plus renoncer au défi, et faut dire que 4 secondes pour trouver la solution, c'est digne du prestige!
Je ne pouvais plus renoncer au défi, et faut dire que 4 secondes pour trouver la solution, c'est digne du prestige!
//On autorise au script de tourner pendant //30 secondes, sans quoi la limite établie //par défaut pourrait nous emmerder. set_time_limit(30); //On cherche maintenant à savoir le + petit //nombre qui, divisé de par 1 à 20, ne laisse //aucun reste. Pensons d'abord que pour être //divisible par 20, il faut être un multiple //de 20. La boucle fera ainsi des sauts de 20, //ce qui évitera enfin d'avoir à tester chaque //nombre d'ici à la solution. ouf! =p //On cherche aussi à ne pas trop encombrer la //boucle pour avoir une réponse le + vite que //possible. Ainsi, il se fait mieux de déclarer //l'array $diviseurs à l'extérieur, sans quoi //le range sera continuellement réécrit. //(des dizaines de millions de fois! o=) $saut = 20; $diviseurs = range(20, 2); $start = time(); //Je calcule le temps d'execution //juste question de savoir! ;) for($nombre = $saut; $reste !== 0; $nombre += $saut){ //Maintenant, pensons à réduire le temps //de calcul en délaissant immédiatement //les nombres qui ne répondent pas aux //conditions. Pour ce faire, nous inversons //le range pour que le plus grand diviseur //soit en première place. (parce que bien //moins de nombres se divisent par 20 que par 2!) //Dès qu'un nombre ne satisfait pas, soit //il est indivisible par un des diviseurs, //on passe au suivant sur le champs. //(d'où if($reste) break;!) //J'ai aussi retiré les diviseurs dont le //résultat est explicite. Souvenons-nous que //la division par zéro est indéfinie, et que //la division par 1 donne un tout, soit aucun reste. foreach($diviseurs as $diviseur){ $reste = $nombre % $diviseur; if($reste) break; }} $end = time(); echo ($nombre - $saut) . ' | ' . ($end - $start) . ' secondes';
imrane555
Messages postés
255
Date d'inscription
jeudi 29 mai 2014
Statut
Membre
Dernière intervention
26 octobre 2015
88
26 oct. 2015 à 09:58
26 oct. 2015 à 09:58
Mdrr tu m'a tué ( t'es genre le mec qui voit un cave faire et qui peut pas s'empêcher d'aller lui donner la solution)
projecteuler.net c'est là ou j'ai trouvé ça je crois que ca devrait t'interesser .
projecteuler.net c'est là ou j'ai trouvé ça je crois que ca devrait t'interesser .
25 oct. 2015 à 17:38
Merci pour ton interpretation j'ai essayé avec foreach (range(1, 20) as $UnAVingt)
mais ca retourne 0 quand meme et j'aimerais bien juste savoir si ce que je tente de faire est faisable en php (le fait que j'essaie de diviser une variable par toutes les valeurs d'un tableau une par une) et je veux savoir aussi si je l'ai bien fait ou pas
25 oct. 2015 à 19:04
J'ai fait quelque chose rapidement es ce que c'est ca que tu veux comme résultat :
$r = 1
1 / 0 =
1 / 1 = 1
1 / 2 = 0.5
1 / 3 = 0.33333333333333
1 / 4 = 0.25
1 / 5 = 0.2
1 / 6 = 0.16666666666667
1 / 7 = 0.14285714285714
1 / 8 = 0.125
1 / 9 = 0.11111111111111
1 / 10 = 0.1
1 / 11 = 0.090909090909091
1 / 12 = 0.083333333333333
1 / 13 = 0.076923076923077
1 / 14 = 0.071428571428571
1 / 15 = 0.066666666666667
1 / 16 = 0.0625
1 / 17 = 0.058823529411765
1 / 18 = 0.055555555555556
1 / 19 = 0.052631578947368
1 / 20 = 0.05
25 oct. 2015 à 20:38
il prend r qui vaut 0 à la base puis qu'il le divise par tout les nombres de 1 à 20 si le quotient est un entier (donc le le reste est sensé être nul ,d'où le "$r % $UnAVingt != 0") pour tous les nombres de 1 à 20 alors le programme devrait afficher $r sinon $r prend la valeur r+1 et il recommence la boucle jusqu'à ce qu'il trouve le nombre le plus petit qui peut etre divisé par tous les nombres de 1 à 20
je sais que ce n'est pas très efficace comme code pour la machine qui le fait touner mais j'ai pas trouvé mieux...
25 oct. 2015 à 21:03
Tu veux trouver le premier r qui diviser par un nombre compris entre [1-20] à un reste R = 0 et comme quotient Q un entier naturel N
faisons le calcul à la main
on pars avec r = 0
en divison euclidienne :
0/1 R-> 0 et Q-> 0 ton code s'arrête la il a trouver un r avec un reste nul et un quotient entier
Modifié par imrane555 le 25/10/2015 à 22:53
mais comment faire pour l'obliger à verifier tous les Quotients un par un c'est ca que je n'arrive pas à faire