zoukankan      html  css  js  c++  java
  • [乘法逆元]

    P3811

    [模板]乘法逆元

    题目大意:求1-n中每个数的逆元

    逆元定义:

    (ax=1(mod~b)),且(a,b)互质,那么把(x)称为(a)(mod~b)意义下的逆元

    做法:

    1:做法很多,这里只说明一个最快的线性算法

    2:设(p=k×i+r,(1<r<i<p))也就是(k)(p÷i)的商,(r)是余数 。

    3:考虑(k×i+r=0(mod~p))两边同时除以(i×r)然后可以得到(k×r^{-1}+i^{-1}=0(mod~p)) (i^{-1}=-k×r^{-1}(mod~p)) (i^{-1}=-lfloorfrac{p}{i} floor×(p~mod~i)^{-1}(mod~p))

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    typedef long long LL;
    using namespace std;
    const int maxn = 3e6+7;
    int n,p;
    LL inv[maxn];
    int main()
    {
    	inv[1] = 1;
    	scanf("%d%d",&n,&p);
    	for(int i=2;i<=n;i++)
    		inv[i] = (p - p/i) * inv[p%i] % p;
    	for(int i=1;i<=n;i++)
    		printf("%lld
    ",inv[i]);
    	return 0;
    } 
    
  • 相关阅读:
    Sql to Linq 小工具
    datagridview后台添加列
    datatable之distinct用法
    生成器
    函数练习一
    函数初识
    文件操作练习
    文件操作
    迭代器 递归
    基础数据类型上机题
  • 原文地址:https://www.cnblogs.com/-Wind-/p/11858094.html
Copyright © 2011-2022 走看看