소스 검색

模运算和快速幂

zj 5 년 전
부모
커밋
250a0e684e
1개의 변경된 파일28개의 추가작업 그리고 8개의 파일을 삭제
  1. 28 8
      E.cpp

+ 28 - 8
E.cpp

@@ -1,15 +1,35 @@
+//
+// Created by 33470 on 11/6/2018.
+//
+
 #include<bits/stdc++.h>
 
 using namespace std;
 
+int poww2(int a, int b, int m) {
+    int ans = 1, base = a % m;
+    while (b != 0) {
+        if (b & 1 != 0)
+            ans = (ans * base) % m;
+        base = (base * base) % m;
+        b >>= 1;
+    }
+    return ans;
+}
+
+int poww(int a, int b, int m) {
+    a %= m;
+    if (b == 0 || a == 1)return 1;
+    if (a == 0 || b == 1)return a;
+    if (b % 2 == 0)return poww(a * a % m, b / 2, m);
+    return (poww(a * a % m, b / 2, m) * a) % m;
+}
+
 int main() {
-    vector<int> v(60);
-    v[0] = 0;
-    v[1] = 1;
-    for (int i = 2; i < v.size(); i++)v[i] = (v[i - 1] + v[i - 2]) % 10;
-
-    long long n;
-    while (cin >> n)
-        cout << v[n % 60] << endl;
+    int a, p, m;
+    while (cin >> a >> p >> m) {
+        if (a == 0 && p == 0 && m == 0)break;
+        cout << poww(a, p, m) << endl;
+    }
     return 0;
 }