• 洛谷 P2613 【模板】有理数取余(高精度取余,逆元)


    传送门


    解题思路

    其实很简单,先考虑什么时候无解:
    当分母b是模数p的倍数时。
    当b不是p的倍数时,又因为p是个大质数,所以可以直接费马小定理求逆元。
    但是a和b很大,所以我们可以先把a和b取模,然后求a乘上b的逆元就行了。

    [ans=a imes b^{-1}pmod p ]

    高精度取余在写了这个题后就感觉杀鸡一样

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int mod=19260817;
    string s1,s2; 
    long long a1,a2;
    int len1,len2;
    long long kp(long long a,int b){
    	if(b==1) return a;
    	long long res=kp(a,b/2);
    	return	(b&1)?res*res%mod*a%mod:res*res%mod;
    }
    int main(){
    	cin>>s1>>s2;
    	len1=s1.length();
    	len2=s2.length();
    	for(int i=0;i<len1;i++){
    		a1=a1*10+s1[i]-'0';
    		a1%=mod; 
    	}
    	for(int i=0;i<len2;i++){
    		a2=a2*10+s2[i]-'0';
    		a2%=mod;
    	}
    	if(a2==0){
    		cout<<"Angry!"<<endl;
    		return 0;
    	}
    	if(a1==0){
    		cout<<0<<endl;
    		return 0;
    	}
    	cout<<a1*kp(a2,mod-2)%mod;
    	return 0;
    }
    
  • 相关阅读:
    poj 2002 Squares 几何二分 || 哈希
    hdu 1969 Pie
    hdu 4004 The Frog's Games 二分
    hdu 4190 Distributing Ballot Boxes 二分
    hdu 2141 Can you find it? 二分
    Codeforces Round #259 (Div. 2)
    并查集
    bfs
    二维树状数组
    一维树状数组
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/14850868.html
Copyright © 2020-2023  润新知