Hoi Allemaal,
Ik was bezig met RSA werkstuk voor wiskunde, en nou wilde ik een programaatje maken die de RSA formule kan uitvoeren:
getal ^ sleutel (mod N)
Dit lukt, maarrrr, met grote getallen met de exponent, duurt het ontzettend lang. Nu heb ik uitgevonden dat je ipv in 1 keer iets tot de macht te doen, en dan modulo, je ook (als je 2^4 hebt en mod is 3), 2x2 (mod 3), dat weer maal 2 (mod 3) en dat weer maal 2 (mod 3).
Dus krijg ik dit in C++:
Werkt allemaal goed, maar als ik dus grote getallen in voer, word dit te groot. Maak er dan een double van hoor ik iedereen zegge, jah, maar als ik dat doe:
F:\Program Files\Microsoft Visual Studio\MyProjects\expo2\expo.cpp(17) : error C2296: '%=' : illegal, left operand has type 'long double'
F:\Program Files\Microsoft Visual Studio\MyProjects\expo2\expo.cpp(17) : error C2297: '%=' : illegal, right operand has type 'long double'
Dus sinds waarom kan % niet met double ? Ik heb geprobeerd mijn eigen % functie te schrijven, maar zonder resultaat, het werkte gewoon niet en was ook nog eens veels te langzaam.
Google heeft ook geen resultaat, wel een mod() functie gevonden, maar die werkte niet?? Heeft iemand anders een idee of oplossing?
Ik was bezig met RSA werkstuk voor wiskunde, en nou wilde ik een programaatje maken die de RSA formule kan uitvoeren:
getal ^ sleutel (mod N)
Dit lukt, maarrrr, met grote getallen met de exponent, duurt het ontzettend lang. Nu heb ik uitgevonden dat je ipv in 1 keer iets tot de macht te doen, en dan modulo, je ook (als je 2^4 hebt en mod is 3), 2x2 (mod 3), dat weer maal 2 (mod 3) en dat weer maal 2 (mod 3).
Dus krijg ik dit in C++:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <iostream.h> int main() { unsigned int getal, macht, modulo, uitkomst; int i; cout << "Getal? "; cin >> getal; cout << "tot de macht? "; cin >> macht; cout << "Modulo? "; cin >> modulo; uitkomst = getal; for (i = 1; i < macht; i++){ uitkomst = uitkomst * getal; uitkomst %= modulo; } cout << "Uiktomst: " << uitkomst << "\n\n"; cin >> i; return 0; } |
Werkt allemaal goed, maar als ik dus grote getallen in voer, word dit te groot. Maak er dan een double van hoor ik iedereen zegge, jah, maar als ik dat doe:
F:\Program Files\Microsoft Visual Studio\MyProjects\expo2\expo.cpp(17) : error C2296: '%=' : illegal, left operand has type 'long double'
F:\Program Files\Microsoft Visual Studio\MyProjects\expo2\expo.cpp(17) : error C2297: '%=' : illegal, right operand has type 'long double'
Dus sinds waarom kan % niet met double ? Ik heb geprobeerd mijn eigen % functie te schrijven, maar zonder resultaat, het werkte gewoon niet en was ook nog eens veels te langzaam.
Google heeft ook geen resultaat, wel een mod() functie gevonden, maar die werkte niet?? Heeft iemand anders een idee of oplossing?