31 lines
525 B
C
31 lines
525 B
C
#include "df.h"
|
|
|
|
uint64 expm(uint64 m, uint64 e, uint64 mod)
|
|
{
|
|
uint128 _r = 1;
|
|
uint128 _m = (uint128)m;
|
|
uint128 _mod = (uint128)mod;
|
|
|
|
while (e > 0) {
|
|
if (e % 2 == 1) {
|
|
_r = (_r * _m) % _mod;
|
|
}
|
|
_m = (_m * _m) % _mod;
|
|
e = e / 2;
|
|
}
|
|
|
|
return (uint64)_r;
|
|
}
|
|
|
|
uint64 generateur(uint64 p)
|
|
{
|
|
uint64 q = (p - 1) / 2;
|
|
uint64 g = 2;
|
|
|
|
while (1) {
|
|
if (expm(g, 2, p) != 1 && expm(g, q, p) != 1) {
|
|
return g;
|
|
}
|
|
g++;
|
|
}
|
|
} |