사용자:Riemann/numero: 두 판 사이의 차이
백괴게임>Riemann (새로운플러그인생성) |
백괴게임>Riemann 잔글편집 요약 없음 |
||
13번째 줄: | 13번째 줄: | ||
{{#vardefine:code| | {{#vardefine:code| | ||
<nowiki> | <nowiki> | ||
/* powerMod */ | /* powerMod */ | ||
function powerMod(root,expo,mod) { | function powerMod(root,expo,mod) { | ||
68번째 줄: | 66번째 줄: | ||
return q % mod; | return q % mod; | ||
} | } | ||
</nowiki> | </nowiki> | ||
}} | }} |
2018년 2월 2일 (금) 21:14 판
/* powerMod */ function powerMod(root,expo,mod) { var power = 1; var expo2 = expo.toString(2); var expoLen = expo2.length; for (i = 0; i < expoLen; i++) { power = (power * power) % mod; power = (power * Math.pow(root, 1 * expo2[i])) % mod; } return power; } /* gcd */ function gcd(x, y) { if (x == 0 || y == 0) { return undefined; } var a = Math.abs(x); var b = Math.abs(y); var c; while (c != 0) { c = a % b; a = b; b = c; } return a; } /* invMod */ function invMod(zahl, mod) { if (zahl == 0 || mod == 0) { return undefined; } var a = Math.abs(mod); var b = Math.abs(zahl) % a; var qtnt = [1]; var c; var p = 1; var q, r; while (c != 0) { c = a % b; qtnt.push(0 - Math.floor(a / b)); a = b; b = c; } q = qtnt[qtnt.length - 2]; for (i = qtnt.length - 3; i > 0; i--) { r = p; p = q; q = r + q * qtnt[i]; } while (q < 0) { q+= mod; } return q % mod; }