洛谷p3811逆元模板打表法

给定 n,p 求 1∼n 中所有整数在模 p 意义下的乘法逆元。

n<=3e6 ,求单个的逆元且p为素数,用费马小定理方便且log(N)

若p不为素数,但互质,用拓欧,也是log(N),打表方便用递归法O(N)打表

#include 
#include 
typedef long long ll;
using namespace std;
const int maxn=3e6+100;
ll n,p;
ll inv[maxn];
int main()
{
    while(scanf("%lld%lld",&n,&p)!=EOF)
    {
        inv[1]=1;
        for(int i=2;i<=n%p;i++)
            inv[i]=(p-p/i)*inv[p%i]%p;
        for(int i=1;i<=n;i++)
            printf("%lld\n",inv[i%p]);
    }
    return 0;
}

 

你可能感兴趣的:(逆元)