您的位置:首页 > 其它

BZOJ 1406 密码箱

2016-06-13 17:29 381 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=1406

题意:给定n,求x^2==1%n

x^2-1=k*n

(x+1)*(x-1)==k*n

(x+1)(x-1)%n=0

n=a*b

则有(x+1)|a且(x-1)|b 或 (x-1)|a且(x+1)|b

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<set>
#define ll long long
using namespace std;
int n;
set<int> ans;
int main(){
scanf("%d",&n);
int len=(int)sqrt(n);
ans.insert(1);
for (int i=1;i<=len;i++)
if (n%i==0){
int a=n/i,b=i,x;
for (x=a+1;x<=n;x+=a)
if ((x+1)%b==0) ans.insert(x);
for (x=a-1;x<=n;x+=a)
if ((x-1)%b==0) ans.insert(x);
}
for (set<int>::iterator i=ans.begin();i!=ans.end();i++) printf("%d\n",*i);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: