zoukankan      html  css  js  c++  java
  • 洛谷 3811 【模板】乘法逆元

    非常想三种方法都用一下,于是rand()走起:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    int n, p, y, x;
    int inv[3000200];
    void write(int x)
    {
        if (x < 0) putchar('-'), x = -x;
        if (x > 9) write(x / 10); putchar(x % 10 ^ 48);
    }
    void ex_gcd(int a, int b)
    {
        if (!b)
        {
            x = 1, y = 0;
            return;
        }
        ex_gcd(b, a % b);
        int t = x;
        x = y;
        y = t - a/b * y;
        return;
    }
    int fastpow(int a, int b)
    {
        int ans = 1;
        while (b)
        {
            if (b & 1) ans = (1LL * ans * a) % p;
            b >>= 1, a = (1LL * a * a) % p;
        }
        return ans;
    }
    int main()
    { 
        srand(time(0));
        scanf("%d%d", &n, &p);
        inv[1] = 1;
        for (register int i = 2, j = rand() % 30; i <= n; ++i, j = rand() % 30)
            if (j != 1 && j != 2) inv[i] = 1LL * inv[p % i] * (p - p / i) % p;
            else if (j == 1) ex_gcd(i, p), inv[i] = x, inv[i] = (inv[i] % p + p) % p;
            else if (j == 2) inv[i] = fastpow(i, p - 2);
        for (register int i = 1; i <= n; ++i) 
            write(inv[i]), putchar('
    ');
        return 0;
    }
  • 相关阅读:
    gradient函数
    matlab函数
    二进制中1的个数
    豆瓣电影数据分析
    豆瓣电影Top250数据爬取学习
    numpy_将nan替换为均值
    多次条形图
    Gym
    Educational Codeforces Round 59 (Rated for Div. 2)
    Codeforces Round #535 (Div. 3)
  • 原文地址:https://www.cnblogs.com/yanyiming10243247/p/9786487.html
Copyright © 2011-2022 走看看