POJ 1061 青蛙的约会 扩展欧几里德 Java
来源:互联网 发布:java程序设计教程 实验 编辑:程序博客网 时间:2024/06/14 05:11
典型的利用扩展欧几里德算法求解模线性方程!!!
【请点击蓝色字体,查看算法详情】
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.math.BigInteger;import java.util.Scanner;/** * 题意:中文题,不解析! * * 分析:典型的模线性方程求解。 * * 解法:①、已知n,m,L,x,y 设步数为 s,由题意得出方程:(ms-ns) % L = y-x * 化简得:(m-n)s ≡ (y-x)(mod L) * ②、根据扩展欧几里德算法求解模线性方程。 * * @author TinyDolphin */public class Main { private static BigInteger x; private static BigInteger y; // 扩展欧几里德算法 public static BigInteger exGcd(BigInteger a, BigInteger b) { if (b.compareTo(BigInteger.valueOf(0)) == 0) { x = BigInteger.valueOf(1); y = BigInteger.valueOf(0); return a; } else { BigInteger d = exGcd(b, a.mod(b)); BigInteger temp = x; x = y; y = temp.subtract(a.divide(b).multiply(y)); return d; } } public static void main(String[] args) { Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); BigInteger X; BigInteger Y; BigInteger M; BigInteger N; BigInteger L; BigInteger gcd; while (in.hasNext()) { X = in.nextBigInteger(); Y = in.nextBigInteger(); M = in.nextBigInteger(); N = in.nextBigInteger(); L = in.nextBigInteger(); BigInteger b = Y.subtract(X); BigInteger a = M.subtract(N); BigInteger n = L; gcd = exGcd(a, n); if (b.mod(gcd).compareTo(BigInteger.valueOf(0)) == 0) { // 扩展欧几里德算法求解模线性方程中的 定理一 x = x.multiply(b.divide(gcd)).mod(n); // 扩展欧几里德算法求解模线性方程中的 定理二 // 注意:得出的 x 可能是负数,需要求最小的正整数解,所以需要 ((x + n/d ) % n/d x = x.add(n.divide(gcd)).mod(n.divide(gcd)); out.println(x); } else { out.println("Impossible"); } } out.flush(); }}
阅读全文
0 0
- poj 1061 青蛙的约会(扩展欧几里德)
- POJ 1061-青蛙的约会(扩展欧几里德)
- POJ 1061青蛙的约会 (扩展欧几里德)
- POJ 1061 青蛙的约会 欧几里德扩展
- POJ 1061 青蛙的约会(扩展欧几里德)
- Poj 1061青蛙的约会 扩展欧几里德
- 【POJ 1061 青蛙的约会】 + 扩展欧几里德
- POJ 1061 青蛙的约会(扩展欧几里德)
- POJ 1061 青蛙的约会 扩展欧几里德 Java
- POJ 1061 青蛙约会(扩展欧几里德)
- poj - 1061 - 青蛙的约会(扩展欧几里德)
- POJ 1061 青蛙的约会(扩展欧几里德)
- POJ 1061 青蛙的约会(扩展欧几里德)
- poj 1061 青蛙的约会(扩展欧几里德)
- poj 1061 青蛙的约会 -扩展欧几里德算法
- POJ-1061 青蛙的约会(扩展欧几里德算法)
- poj 1061 青蛙的约会(扩展欧几里德)
- hihoCoder 1297 扩展欧几里德 && POJ 1061 青蛙的约会
- springmvc、jpa(hibernate)、mybatis组合框架搭建(二)——加入mybatis以及json返回值
- 【JavaScript】匿名函数
- POJ 3301三分
- 深入理解Servlet线程安全问题
- 深入浅出TensorFlow(六)TensorFlow高层封装
- POJ 1061 青蛙的约会 扩展欧几里德 Java
- 习题 1.6 编写一个C程序,输入a, b, c 3个值,输出其中最大者。
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- Ajax异步处理和利用jquery对Ajax的使用
- nyoj 题目220 推桌子 贪心算法
- 安装es2.4.0
- HDU1286 找新朋友(欧拉函数)
- 反爬虫绕过初级——添加http header和gzip解压处理
- [Leetcode]_38 Count and Say