SGU119 Magic Pairs
来源:互联网 发布:淘宝积分查询 编辑:程序博客网 时间:2024/06/06 06:31
SGU119 Magic Pairs
题目大意
找出所有的
算法思路
∵AX+BY≡0 (mod N)
∴A0(AX+BY)≡0 (mod N) ,即A0AX+A0BY≡0 (mod N)
由A0X+B0Y≡0 (mod N) 可得,A0X≡−B0Y (mod N)
带入上式得,−B0AY+A0BY≡0 (mod N)
∵Y 的取值不全为0,∴A0B≡B0A (mod N)
至此,可以枚举
时间复杂度: O(NlogN)
代码
/** * Copyright © 2015 Authors. All rights reserved. * * FileName: 119.cpp * Author: Beiyu Li <sysulby@gmail.com> * Date: 2015-05-30 */#include <bits/stdc++.h>using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define For(i,s,t) for (int i = (s); i <= (t); ++i)#define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)typedef long long LL;typedef pair<int, int> Pii;const int inf = 0x3f3f3f3f;const LL infLL = 0x3f3f3f3f3f3f3f3fLL;void gcd(int a, int b, int &g, int &x0, int &y0){ if (!b) g = a, x0 = 1, y0 = 0; else gcd(b, a % b, g, y0, x0), y0 -= x0 * (a / b);}int inv(int a, int m){ int g, x0, y0; gcd(a, m, g, x0, y0); return g == 1? (x0 + m) % m: -1;}vector<Pii> vec;void solve(int a0, int b0, int n){ rep(a,n) { int x = b0 * a % n; if (a0 % n == 0) { if (x) continue; rep(b,n) vec.push_back(Pii(a, b)); } else { int g = __gcd(a0, n); if (x % g != 0) continue; int b = inv(a0 / g, n / g) * (x / g) % (n / g); while (b < n) vec.push_back(Pii(a, b)), b += n / g; } }}int main(){ int n, a0, b0; scanf("%d%d%d", &n, &a0, &b0); int g = __gcd(__gcd(a0, b0), n); solve(a0 / g, b0 / g, n / g); printf("%d\n", (int)vec.size()); foreach(it,vec) printf("%d %d\n", it->first * g, it->second * g); return 0;}
0 0
- sgu119:Magic pairs
- SGU119 Magic Pairs
- sgu119
- sgu119
- sgu 119 Magic Pairs
- SGU 119 Magic Pairs
- [SGU]119. Magic Pairs
- sgu 119 Magic Pairs
- 119. Magic Pairs
- SGU 119 Magic Pairs
- SGU 119. Magic Pairs 同余+枚举
- SGU 119 Magic Pairs(数论)
- SGU 119 Magic Pairs(一元线性同余方程)
- 【magic】
- magic
- Magic
- magic
- pairs
- 浅谈iOS面对对象之继承
- java文件读取全了解
- [实用技巧] 永久改键软件SharpKeys, 超级好用
- 用c语言来实现井字棋
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- SGU119 Magic Pairs
- 十二周——多态性——阅读项目(2)
- java线程中run和start方法的区别
- Internal Sorting: Natural Two-way Merge Sort: Sorting by Merging
- Hadoop学习笔记(五)---HDFS shell操作
- C# web实现文件下载
- Climbing Worm
- Eclipse Luna安装Activiti Designer报错解决方案
- 研华工控模拟量输入相关概念