【BZOJ】1406: [AHOI2007]密码箱】的更多相关文章

二次联通门 : BZOJ 1406: [AHOI2007]密码箱 /* BZOJ 1406: [AHOI2007]密码箱 数论 要求 x^2 ≡ 1 (mod n) 可以转换为 x ^ 2 - k *n = 1 (x + 1) * (x - 1) = k * n 设 n = a * b 则 a * b | (x + 1) * (x - 1) 那么枚举b即可 */ #include <cstdio> #include <cmath> #include <set> type…
1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 701  Solved: 396[Submit][Status] Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述: 密码…
(x+1)(x-1) mod N = 0, 枚举N的>N^0.5的约数当作x+1或者x-1... ------------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<cmath>   using namespace std;   type…
推出来了一个解法,但是感觉复杂度十分玄学,没想到秒过~ Code: #include <bits/stdc++.h> #define ll long long #define N 50000 #define setIO(s) freopen(s".in","r",stdin) using namespace std; namespace Math { ll pp,answer; ll exgcd(ll a,ll b,ll &x,ll &y…
1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1591  Solved: 944[Submit][Status][Discuss] Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以…
http://www.lydsy.com/JudgeOnline/problem.php?id=1406 题意:求$0<=x<n, 1<=n<=2,000,000,000, 且x^2 \equiv 1 \pmod{n}$的所有$x$ #include <bits/stdc++.h> using namespace std; typedef long long ll; set<ll> s; int main() { ll n; scanf("%lld…
BZOJ_1406_[AHOI2007]密码箱_枚举+数学 Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述: 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1. 小可可知道满足上述条件的x可能不止一个,所以一定要把所有满足条件的x计算出来,…
P4296 [AHOI2007]密码箱 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1. 求这个密码,$1<=n<=2,000,000,000$ 暴力枚举,数据有点儿水$O(nlogn)$,显然过不了$n<=10^9$ #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #define LL long long using namesp…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] \(x^2%n=1\) \(x^2-1 = k*n\) \((x+1)*(x-1) % n == 0\) 设\(n=a*b\) 对于所有的a,b(a < b) 如果x是符合要求的x. 那么一定会有某些a,b满足(x+1)%a==0 && (x-1)%b==0 或者 (x+1)%b==0 && (x-1)%a==0 因为a*b其实就是质因数分解之后某两个因子相乘. 而\((x+1)*(x-1)\)既然是…
直接两层枚举就行了. 避免排序可以用set. #include<iostream> #include<cstdio> #include<cstring> #include<set> #include<algorithm> using namespace std; set <int> s; set <int> :: iterator it; ],cnt=; int main() { scanf("%d",…