同餘方程與分數取餘

同餘方程 https://www.luogu.com.cn/blog/cicos/solution-p1082

ax≡1(modb)

#include<bits/stdc++.h>
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define per(i,a,b) for(ll i=a;i>=b;--i)
#define pb push_back
#define mem(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
static const ll maxn=2e5+5,mod=1e9+7;
int x,y;
void exgcd(ll a,ll b){
	if(b==0){
		x=1;
		y=0;
		return ;
	}
	exgcd(b,a%b);
	ll temp=x;
	x=y;
	y=temp-(a/b)*y;
}
/*
ll exgcd(ll a,ll b,ll &x,ll &y) {
    if(!b) {
        x=1,y=0;
        return a;
    }
    ll res=exgcd(b,a%b,y,x);
    y-=a/b*x;       ///x=x1,y=x1-a/b*y1   x1,y1代表下一狀態
    return res;
}
*/
int main(){
	ll a,b;
	cin >> a >> b;
	exgcd(a,b);
	x=(x%b+b)%b;
	cout << x;
	return 0;
}

分數取餘 https://www.luogu.com.cn/problemnew/solution/P2613

c=a/b​,求 c mod 19260817 的值

#include<bits/stdc++.h>
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define per(i,a,b) for(ll i=a;i>=b;--i)
#define pb push_back
#define mem(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
static const ll maxn=2e5+5,mod=19260817;
template<class T>
inline void read(T &x){
	x=0;
	int f=0;
	char c=getchar();
	while(!isdigit(c)){
		f|=(c=='-');
		c=getchar();
	}
	while(isdigit(c)){
		x=(x<<3)+(x<<1)+c-'0';
		x%=mod;
		c=getchar();
	}
	if(f) x=-x;
}
int x,y;
void exgcd(ll a,ll b){
	if(b==0){
		x=1;
		y=0;
		return ;
	}
	exgcd(b,a%b);
	ll temp=x;
	x=y;
	y=temp-(a/b)*y;
}
int main(){
	ll a,b;
	read(a);
	read(b);
	if(b%mod==0){
		puts("Angry!");
		return 0;
	}
	exgcd(b,mod);
	x=(x%mod+mod)%mod;
	cout << a*x%mod;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章