2016-12-15 3 views
-5

Je veux une grande opération mathématique en C++.Grande opération mathématique C++

long long h= 4294967295; 
long long d=7910266469; 
long long n=10021211227; 
long long result; 

Je suis besoin de calculer c'est:

h^d mod n

result=pow(h,d) % n; 

Je ne sais pas quel type using.Please me aide pour choisir des numéros de type .. Merci

+0

J'utilise Dev-C++ –

+0

erreur: résultat doit être de type double –

+5

vous devriez faire la les maths en premier. Peut-être existe-t-il un type de nombre qui vous permet de faire 'pow (h, d)' mais étant donné que vous n'avez besoin que du résultat mod 'n', vous n'avez pas vraiment besoin de' pow (h, d) '. Pour sûr il y a des identités que vous pouvez utiliser pour rendre le calcul faisable avec 'long long', je ne les connais pas par coeur;) – user463035818

Répondre

1

Regardez this wikipedia article. Il est un exemple assez agréable avec le code pseudo-efficace mémoire suivante:

function modular_pow(base, exponent, modulus) 
    if modulus = 1 then return 0 
    c := 1 
    for e_prime = 1 to exponent 
     c := (c * base) mod modulus 
    return c 

Il y a même un exemple pour beeing mémoire efficace et en utilisant moins les opérations. Je pense que l'extraction du code C++ devrait être possible. Si vous utilisez cette méthode, long long convient à votre solution.


Non testé mais un simple 1: 1 traduction du code pseudo en haut ...

long long result = 1; 
int i; 
for(i=0; i<d;i++){ 
    result = (result * h) % n; 
} 
+0

Ce code autre langage de programmation je suis mauvaise conversion en C++. –

+0

désolé mon anglais –

+0

Peut-être que je devrais noter que pour le grand 'd' le calcul prendra vraiment vraiment très long – izlin