首页 > 其他 > 详细

BZOJ 1406 密码箱

时间:2016-06-13 19:10:05      阅读:174      评论:0      收藏:0      [点我收藏+]

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

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<string>
 6 #include<algorithm>
 7 #include<set>
 8 #define ll long long
 9 using namespace std;
10 int n;
11 set<int> ans;
12 int main(){
13     scanf("%d",&n);
14     int len=(int)sqrt(n);
15     ans.insert(1);
16     for (int i=1;i<=len;i++)
17      if (n%i==0){
18         int a=n/i,b=i,x;
19          for (x=a+1;x<=n;x+=a)
20           if ((x+1)%b==0) ans.insert(x);
21          for (x=a-1;x<=n;x+=a)
22          if ((x-1)%b==0) ans.insert(x);
23      }
24     for (set<int>::iterator i=ans.begin();i!=ans.end();i++) printf("%d\n",*i);
25 }

 

BZOJ 1406 密码箱

原文:http://www.cnblogs.com/qzqzgfy/p/5581371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!