Albert_lob--P1082

· · 题解

P1082 同余方程题解

此题虽然是绿题,但因为其是数论题的本质,但只要掌握其内在方法,便非常简单;
题目有两个字:方程,其实我们也可以用枚举法来模拟方程,但时间我可不保证不会TIE

其实不难发现,题目中是有一些规律的,当我们写代码的时候,可以列一个式子:

(a·x) \div (b·h)=1

当我们把这条式子写进程序后,程序编号了不少!
接下来,发放程序吧!

#include<iostream>
using namespace std;
long long x,y;//定义两个超长整形;
void e(long long a,long long b){//创建同余方程式函数; 
    if(b==0){//b没了! 
        x=1;
        y=0;
        return;//over; 
    }
    e(b,a%b);
    long long tmp;
    tmp=x; 
    x=y;//把x变为y; 
    y=tmp-a/b*y;//x-a/b*y//向最小可余一整数递推; 
}
int main(){
    long long a,b;//定义两个超长整形;
    scanf("%lld%lld",&a,&b); 
    e(a,b);//求最小的整数;
    x = (x % b + b) % b;//求最小的x;
    printf("%d",x);
    return 0;
}

作弊者可耻!
不许抄答案!!