zoukankan      html  css  js  c++  java
  • [洛谷P1082]同余方程

    传送门:同余方程

    题意不说了 很水……学完扩欧做的板子题
    把ax≡1(modb)转化成一般线性方程ax+by=1
    然后扩欧

    唯一要注意的是要找最小正整数解,所以搞出来x之后需要乱搞处理一下
    然后就没有了
    这是一篇很水的题解……关于扩欧走这里:扩展欧几里得学习笔记

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    inline int read(){
    	int cnt=0,f=1;char c;
    	c=getchar();
    	while(!isdigit(c)){
    		if(c=='-')f=-f;
    		c=getchar();
    	}
    	while(isdigit(c)){
    		cnt=cnt*10+c-'0';
    		c=getchar();
    	}
    	return cnt*f;
    }
    int a,b,x,y;
    void exgcd(int a,int b,int &x,int &y){
        if(b==0){
            x=1;y=0;return;
        }
        exgcd(b,a%b,x,y);
        int z=x;x=y;y=z-y*(a/b);
    //    return d; 
    }
    int main(){
    	a=read();b=read();
    	exgcd(a,b,x,y);
    	if(b<0)b=-b;
    	if(x<=0){
    		while(x<0)x+=b;
    		printf("%d",x);
    	}
    	else{
    		while(x>0)x-=b;
    		x+=b; 
    		printf("%d",x);
    	}
    	return 0;
    }
    
  • 相关阅读:
    指针
    day07
    day06
    oracle instr
    动态解析dll及使用类
    客户端调用接口
    Java中调用WebService
    Vs2015智能提示英文
    oracle中varchar(32)转nvarchar(32)
    C#创建XML节点
  • 原文地址:https://www.cnblogs.com/kma093/p/10087253.html
Copyright © 2011-2022 走看看