HYSBZ 1406:http://www.lydsy.com/JudgeOnline/problem.php?id=1406
题意:找出x*x%n==1,x<=n,求解满足条件的所有x。
题解:看了很久,才看明白别人的题解,(x-1)*(X+1)==k*n=k*a*b,其中n==a*b,所以枚举n的因数,所以(x-1)=k*b或者(x+1)=k*b,然后对应的检查(x+1)%a==0?以及(x-1)%a==?满足则加入set,set有去重的效果,然后输出。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<set> 6 #include<cmath> 7 using namespace std; 8 int n; 9 set<int>Q; 10 int main(){ 11 while(~scanf("%d",&n)){ 12 int num=(int)sqrt(n); 13 for(int i=1;i<=num;i++){ 14 if(n%i==0){ 15 int b=n/i; 16 for(int x=1;x<=n;x+=b){ 17 if((x+1)%i==0) 18 Q.insert(x); 19 } 20 for(int x=b-1;x<=n;x+=b){ 21 if((x-1)%i==0) 22 Q.insert(x); 23 } 24 25 } 26 } 27 while(!Q.empty()){ 28 printf("%d ",*Q.begin()); 29 Q.erase(Q.begin()); 30 } 31 32 } 33 }