传送门:www.lydsy.com/JudgeOnline/problem.php?id=1406
题意:
解 x^2%n=1
=> (x+1)(x-1)=k*n
令n=ab
a|(x+1)&&b|(x-1) || a|(x-1)&&b|(x+1)
sqrt(n)枚举a,b并检验+去重
Code:
#include<set>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned int lld;
lld n;
set<lld>s;
int main(){
cin>>n;
if(n==1){
puts("None");
return 0;
}
for(int i=1;i*i<=n;i++){
if(n%i)continue;
lld a=i,b=n/i;
for(int j=0;j<=n;j+=b){
if((j+2)%a==0&&j+1<n)s.insert(j+1);
if((j-2)>=0&&(j-2)%a==0)s.insert(j-1);
}
}
for(set<lld>::iterator it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
return 0;
}