有理数取余

【模板】有理数取余

题目描述

给出一个有理数 c=ab,求 cmod19260817 的值。

这个值被定义为 bxa(mod19260817) 的解。

有理数取余

abmodp=a×b1

费马小定理:若p为素数,gcd(a,b)=1,则有a1=1(modp)
ax=ap1(modp)
x=ap2(modp)

快读,边读入边模。然后利用快速幂求b1,在将b1×a输出即可。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll p = 19260817;

inline int read(){
    int res = 0;
    char ch = getchar();
    while(ch < '0' || ch > '9')
        ch = getchar();
    
    while('0' <= ch && ch <= '9'){
        res = (res<<3)+(res<<1) + (ch^48);
        res %= p;
        ch = getchar();
    }
    return res;
}

int power(int a,int b){
    int res  = 1;
    while(b){
        if(b&1)res=(ll)res * a % p;
        a = (ll)a * a % p;
        b >>= 1;
    }
    return res;
}


int main()
{
    int  a,b;
    a = read();
    b = read();
    b = power(b,p-2);
    cout << (ll)a * b % p << endl;


}
posted @   Erfu  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示