POJ1061 扩展欧几里得

根据题意得出的方程 (m-n)t+Lk=y-x t为步数 k为圈数 然后根据扩展欧几里得就能得出解 然后处理一下就可以了

对L取余要防止负数情况

#include <iostream>
#include<cstdio>

using namespace std;
void exgcd(long long a,long long b,long long &d,long long &x,long long &y)
{
    if(b==0)
    {
        x=1;y=0;d=a;
        return;
    }
    else
    {
        exgcd(b,a%b,d,x,y);
        long long temp=x;
        x=y;
        y=temp-(a/b)*y;
    }
}
int main()
{
    long long x,y,m,n,l,gcd,ansx,ansy;
    while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l))
    {
        exgcd(m-n,l,gcd,ansx,ansy);
        if((y-x)%gcd==0)
        {
            ansx*=(y-x)/gcd;
            ansx=(ansx%l+l)%l;
            printf("%d\n",ansx);
        }
        else
        printf("Impossible\n");
    }
    return 0;
}
时间: 2024-12-30 09:56:30

POJ1061 扩展欧几里得的相关文章

POJ2115 扩展欧几里得

扩展欧几里得模板题 根据题意理出二元一次方程 A+X*C-B=Y*2^k 移项可得X*C+Y*2^k=B-A  然后扩展欧几里得 就得出答案了 #include <iostream> #include<cstdio> #include<cstring> using namespace std; void exgcd(long long a,long long b,long long &d,long long &x,long long &y) {

POJ2447 分解因数+扩展欧几里得+高次幂取模

昨天一天弄明白的pollard-rho启发式因数分解没想到今天就用上了 而且是一次过 感觉好有成就感  题目大意 给你N=P*Q 先把p q从N因数分解出来 得到具体的值 然后(p-1)*(q-1)=t 从而求出t的值 有了t的值 根据e*d(mod t)=1 求出e模t的逆元d 注意求出的逆元可能为负 然后求c^d%n 为m 就是 题目要求的值 这题的解题步骤如下 1根据pollard-rho启发式因数分解 把n分解成两个素数p q; 2(p-1)*(q-1)求出t的值 3通过扩展欧几里得 求

扩展欧几里得求两多项式最大公因式

#include <iostream> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; typedef long long LL; const double eps = 1e-8; const int MOD = 999983; const int N = 55; struct Poly { int n; LL a[N]; }; Poly p[25];

POJ 2142 扩展欧几里得

这题问的是|x|+|y|最小的时候 讨论一下当取x最小正整数解的时候 通过x求出y 当y取最小正整数解的时候通过y求出x  只有这两种情况因为情况的x和y都比这两种情况的大  所以只需要比较这两种情况的特解就可以得出答案 #include <iostream> #include<cstdio> #include<cstring> using namespace std; void exgcd(long long a,long long b,long long &

poj-2677 动态规划、双调欧几里得旅行商

Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2699   Accepted: 1193 Description John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts visiting beautiful places. To save money, John must

C - Line——(扩展欧几里得算法)

传送门 C. Line time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output A line on the plane is described by an equation Ax + By + C = 0. You are to find any point on this line, whose coordinates are in

最古老的算法:辗转相除法(求两个自然数最大公约数)

在数学界,辗转相除法,又称欧几里得算法,被认为是世界上最早的算法(公元前300年),该算法用于求两个最大公约数的算法.辗转相除法首次出现于欧几里得的<几何原本>(第VII卷,命题yⅠ和Ⅱ)中,而在中国则可以追溯至东汉出现的<九章算术>. 两个自然数的最大公约数是能够同时整除它们的最大的正整数.辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约 数.例如,1254和390的最大公约数是6(1254 = 6 × 209:390 = 6 × 65):用

B - Biorhythms——(中国剩余定理)

传送门 Password:nefu Description 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏捷,精力容易高度集中.因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天.对于每个人,我们想知道何时三个高峰落在同一天.对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间).你的任务是给定一个从当年

POJ 1014 DP

这题我用DP做的 并且记住一定不要先对2取模 我一开始对2取模果断WA后来发现 如果是3 0 1 0 0 0 这种情况是可分的但是如果提前对2取模变成1 0 1 0 0 0 这种情况那么就不可分了 还有待于提高啊 看到一个神剪枝 1-6的最小公倍数是60 每个数量对60取余就行了 至于为什么 我是根据利用扩展欧几里得解多元不定方程逆着想通的 不知道还有没有更好的证明方法 #include <iostream> #include<cstdio> #include<cstring