À des fins de test, j'ai besoin de trouver deux valeurs entières de 64 bits qui se multiplient exactement en une valeur intermédiaire de 128 bits avec un modèle de bits spécifique. Évidemment, je peux générer la valeur intermédiaire désirée et diviser par des valeurs aléatoires jusqu'à ce que je trouve une combinaison qui fonctionne, mais y a-t-il un moyen plus efficace?Existe-t-il un moyen facile de trouver deux valeurs qui, multipliées ensemble, produisent un modèle de bits exact?
Répondre
Ce problème ressemble à integer factorisation. Aucun algorithme rapide n'est malheureusement connu, mais en jetant un coup d'œil sur cette page de Wikipedia, il semble qu'il y ait quelques algorithmes (peut-être compliqués) qui soient plus rapides que la division d'essai.
En effet, j'avais le sentiment que c'était le cas. Cela est rendu encore plus délicat par le fait que les deux variables cibles doivent tomber dans une fourchette donnée. –
J'étais sur le point de publier la même chose que j_random_hacker. Je vais juste ajouter que si le nombre de 128 bits est premier, ou a un facteur premier supérieur à 64 bits, alors il n'y aura pas de solution à votre problème.
Heureusement, je peux juste générer une nouvelle valeur de 128 bits après un certain nombre d'itérations ont échoué. Donc c'est un bonus. –
Eh bien, si vous pouvez générer de nouvelles valeurs de 128 bits, alors quelles sont les particularités de ces valeurs? Ne serait-il pas plus facile de générer des valeurs de 64 bits et de les multiplier ensemble? Si vous avez besoin de caractéristiques spéciales dans la valeur de 128 bits, il est peut-être plus facile de déterminer comment créer des paires de nombres de 64 bits qui se multiplieront par une valeur de 128 bits avec les caractéristiques souhaitées que de le faire dans l'autre sens. –
Et je vais ajouter un commentaire précédent: si le numéro de 128 bits a premier facteur supérieur à 64 bits, alors il a certainement un facteur moins de 64 bits :)
- 1. Existe-t-il un moyen facile de trouver des classes orphelines dans un projet Flex/ActionScript?
- 2. Existe-t-il un moyen de surveiller le nombre de cheminements CAS qui se produisent?
- 3. Un moyen facile de simuler Viewstate invalide?
- 4. Existe-t-il un moyen facile de trouver des dépendances pour un sous-formulaire dans Access?
- 5. ASP.NET - Un moyen facile d'échanger un booléen?
- 6. Existe-t-il un moyen facile de personnaliser un QProgressBar?
- 7. Existe-t-il un moyen facile de trouver de petits projets open source?
- 8. Un moyen facile de pdf un rapport Web
- 9. Sélection de lignes uniques dans un ensemble de deux possibilités
- 10. Comment trouver le plus petit intervalle contenant un ensemble de valeurs modulo N?
- 11. Existe-t-il un moyen facile de comparer la proximité de deux couleurs?
- 12. Un moyen facile de rechercher une chaîne pour les chaînes
- 13. Trouver l'ensemble minimum de propriétés qui décrivent un référent dans un ensemble d'entités
- 14. Qu'est-ce qu'un moyen facile de faire un diff trié entre deux fichiers?
- 15. AS3 -TypeError # 1009 - un moyen facile de trouver * quelle * référence d'objet est nulle?
- 16. Un moyen facile de nourrir dans un nombre décimal sous forme de chaîne dans un NSDecimalNumber?
- 17. Un moyen facile de définir CurrentCulture pour l'ensemble de l'application?
- 18. Un moyen facile de retrive timestamp de SQL Server db
- 19. Meilleur moyen de convertir une liste à un ensemble de deux-tuples dans Erlang?
- 20. Existe-t-il un moyen facile de couler entre deux listes <T>?
- 21. Existe-t-il un moyen facile de sortir deux colonnes vers la console en Java?
- 22. Un moyen facile d'archiver des objets liés
- 23. Extraire un sous-ensemble de valeurs d'un tableau associatif (php)
- 24. Trouver enregistrement suivant dans un ensemble: LINQ
- 25. Sql Requête pour trouver Une série de dates qui se produisent à moins de 5 minutes l'une de l'autre? Ce
- 26. Un moyen facile de voir SQL généré par ActiveRecord.Save()?
- 27. Un moyen facile de déterminer l'année bissextile en rubis?
- 28. Un moyen facile d'ajouter une action de contexte à Eclipse
- 29. Visual Studio 2008, un moyen facile de gérer les paramètres?
- 30. Vérification du contenu du nœud contre un ensemble de valeurs
« valeurs aléatoires »? Que diriez-vous des "facteurs premiers"? Cela aurait plus de sens, n'est-ce pas? Ou y a-t-il quelque chose à propos de la factorisation primaire simple qui ne s'applique pas ici? –
Eh bien, les valeurs de sortie doivent se situer dans une certaine plage. Plus précisément, ceci est pour les tests à virgule flottante, donc pour une valeur à virgule flottante avec une mantisse à M bits, j'ai besoin du Mième bit défini dans les facteurs, donc je ne peux pas me fier uniquement aux facteurs premiers. –