题解:P1082 [NOIP2012 提高组] 同余方程

由同余知识易得,a×x1(modb) 有解当且仅当 gcd(a,b)=1

于是本题就变为了 a×x+b×y=1,用 Exgcd 算法求出一组解为 x0,y0,则 x0 为原方程的解,通解为所有模 bx0 同余的整数。

最后通过取模就得到最小的解了。

#include<bits/stdc++.h>
using namespace std;
const int mod=1e4;
int n;
void mul(int f[2],int a[2][2]){
	int c[2];
	memset(c,0,sizeof(c));
	for(int j=0;j<2;j++){
		for(int k=0;k<2;k++){
			c[j]=(c[j]+(long long)f[k]*a[k][j])%mod;
		}
	}
	memcpy(f,c,sizeof(c));
}
void mulself(int a[2][2]){
	int c[2][2];
	memset(c,0,sizeof(c));
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				c[i][j]=(c[i][j]+(long long)a[i][k]*a[k][j])%mod;
			}
		}
	}
	memcpy(a,c,sizeof(c));
}
int main(){
	while(cin>>n&&n!=-1){
		int f[2]={0,1};
		int a[2][2]={{0,1},{1,1}};
		for(;n;n>>=1){
			if(n&1)mul(f,a);
			mulself(a);
		}
		cout<<f[0]<<'\n';
	}
	return 0;
}
posted @   All_Unluck_Beginning  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示