1 条题解

  • 0
    @ 2022-10-20 17:46:06

    因为 p 为质数,可以使用费马小定理求解。

    80分,暴力求幂

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,p;
        cin>>n>>p;
        for(int i=1;i<=n;i++){
            //输出i的逆元
            //基于费马小定理,p是质数,所以i模p意义下的逆元为 i^{p-2}
            int ans=1;
            for(int j=1;j<=p-2;j++)
                ans=ans*i%p;
            cout<<ans<<"\n";
        }
        return 0;
    }
    

    100分,快速幂

    #include <bits/stdc++.h>
    using namespace std;
    // a^b (mod p)
    long long quick_pow(long long a, long long b, long long p)
    {
        long long res = 1;
        while (b)
        {
            if (b & 1)
                res = (res * a) % p;
            b = b >> 1;
            a = (a * a) % p;
        }
        return res;
    }
    //求 x 在模 p 意义下的逆元(要求 p 是一个质数)
    long long inv(long long x, long long p)
    {
        return quick_pow(x, p - 2, p);
    }
    int main()
    {
        long long n, p;
        cin >> n >> p;
        for (long long i = 1; i <= n; i++)
            cout << inv(i, p) << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    1109
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    78
    已通过
    27
    上传者