题目大意:给出n,求1~n所有数的乘法逆元。
乘法逆元的概念是:如果b*rev(b)≡1 (mod p),p与b互质,则rev(b)就是b的模p乘法逆元。乘法逆元往往用于除法取模。
具体操作详见http://www.cnblogs.com/headboy2002/p/8845986.html
#include <cstdio> using namespace std; int exgcd(int a, int b, int &x, int &y) { if (!b) { x = 1; y = 0; return a; } int d = exgcd(b, a%b, x, y); int tx = x; x = y; y = tx - y*(a / b); return d; } int inv(int a, int p) { int x, y; exgcd(a, p, x, y); return (x%p+p)%p; } int main() { int n, p; scanf("%d%d", &n, &p); for (int i = 1; i <= n; i++) printf("%d ", inv(i, p)); return 0; }