2009-09-16 4 views
2

À 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?

+0

« 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? –

+0

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. –

Répondre

7

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.

+0

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. –

4

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.

+0

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. –

+3

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. –

1

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 :)

Questions connexes