BZOJ1406 密码箱

x2 ≡ 1 (mod n) => x2 = k * n + 1 => n | (x + 1) * (x - 1)

设n = a * b,则 (a | x + 1 且 b | x - 1) 或 (a| x - 1 且 b | x + 1)

于是暴力 a∈[1,n√]


#include <cstdio>
#include <set>
using namespace std;
typedef long long ll;
set<ll>::iterator it;
set<ll> S;
ll n;
int main() {
    ll a,b,x;
    scanf("%lld\n",&n);
    for (int i=1;i*i<=n;++i)
        if(n%i==0){
        a=i,b=n/i;
        for (int k=0;(x=b*k+1)<n;++k)
            if ((x+ 1) % a == 0)
                S.insert(x);
        for (int k=1;(x=b*k-1)<n;++k)
            if ((x-1)%a==0)
                S.insert(x);
        }
    for(it=S.begin();it!=S.end();it++)
        printf("%lld\n", *it );
    return 0;
}
时间: 2024-10-13 16:10:40

BZOJ1406 密码箱的相关文章

【BZOJ-1406】密码箱 约数 + 乱搞 + set?

1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1143  Solved: 677[Submit][Status][Discuss] Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以

bzoj1406: [AHOI2007]密码箱

数学. x^2 % n = 1 则 (x+1)(x-1) = kn. 设 x+1 = k1*n1, x-1=k2*n2. 则 k1*k2=k , n1*n2=n. 算出每个大于sqrt(n)的约数,然后分别作n1,n2尝试是否可行. 算x一定要取模.否则1会变成n+1. #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath>

[BZOJ1406][AHOI2007]密码箱(数论)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1406 分析: (x+1)(x-1)是n的倍数 于是可以把n分解成n=ab,则a为(x+1)约数且b为(x-1)约数 或者 a为(x-1)约数且b为(x+1)约数 于是1~sqrt(n)枚举因数,判断就行,如果某个x可以就加入到set中

密码箱

在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述: 密码x大于0,且小于n,而x的平方除以n,得到的余数为1. 小可可知道满足上述条件的x可能不止一个,所以一定要把所有满足条件的x计算出来,密码肯定就在其中.计算的过程是很艰苦的,你能否编写一个程序来帮助小可可呢?(题中x,n均

bzoj 1406: [AHOI2007]密码箱 二次剩餘

1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 701  Solved: 396[Submit][Status] Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述: 密码

HYSBZ 1406 密码箱

1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 670  Solved: 376 [Submit][Status] Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述:

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

【BZOJ】【1406】【AHOI2007】密码箱

数论 Orz iwtwiioi 果然数论很捉鸡>_>完全不知道怎么下手 $$x^2 \equiv 1 \pmod n \rightarrow (x+1)*(x-1)=k*n $$ 所以,我们得到$$n | (x+1)(x-1)$$ 那么有什么用呢?注意到整除是个神奇的关系= =所以我们可以令$n=a*b$,那么对于每个x,一定有$a|(x+1) 且 b|(x-1)$ 或是 $a|(x-1) 且 b|(x+1)$ 然后?我们可以$O(\sqrt{n})$枚举a,得到b,然而,x+1(或者x-1)

HYSBZ 1406 密码箱【数学】

Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系.假设这个数是n,密码为x,那么可以得到如下表述: 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1. 小可可知道满足上述条件的x可能不止一个,所以一定要把所有满足条件的x计算出来,密码肯定就在其中.计算的过程是很艰苦的,你能否编写一个程序来