exgcd 80 分,快速幂 64 分。。。
exgcd:
#include<bits/stdc++.h>
using namespace std;
long long x, y;
#define pc putchar
inline void write(long long x) {if(x > 9) write(x / 10); pc(x % 10 + '0');}
void exgcd(long long a, long long b) {
if(!b) {x = 1; y = 0; return ;}
exgcd(b, a % b); long long tx = x; x = y; y = tx - a / b * y;
}
int main() {
long long n, p; cin >> n >> p;
for(long long i = 1; i <= n; i++) {
exgcd(i, p); long long ans = (x % p + p) % p; write(ans); pc('\n');
}
return 0;
}
快速幂:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int x, y;
#define pc putchar
inline void write(int x) {if(x > 9) write(x / 10); pc(x % 10 + '0');}
inline int Pow(int a, int b, int p) {
int ans = 1;
while(b) {
if(b & 1) ans = ans * a % p;
a = a * a % p;
b >>= 1;
}
return ans;
}
signed main() {
int n, p; cin >> n >> p;
for(int i = 1; i <= n; i++) {
int ans = Pow(i, p - 2, p); write(ans); pc('\n');
}
return 0;
}
都开了 C++20 O2