X*X mod P = A,其中P为质数。给出P和A,求<=P的所有X。
 
Input
两个数P A,中间用空格隔开。(1 <= A < P <= 1000000, P为质数)
Output
输出符合条件的X,且0 <= X <= P,如果有多个,按照升序排列,中间用空格隔开。
如果没有符合条件的X,输出:No Solution
Input示例
13 3
Output示例
4 9

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <algorithm>
 5 #include <stdio.h>
 6 using namespace std;
 7 #define ll long long
 8 ll quickm(ll m,ll n,ll p)
 9 {
10     ll b=1;
11     while(n){
12         if(n&1) b=(b*m)%p;
13         n=n>>1;
14         m=(m*m)%p;
15     }
16     return b;
17 }
18 int main()
19 {
20     ll p,a;
21     scanf("%d%d",&p,&a);
22     ll t=0,i;
23     for(i=1;i<=p;i++){
24         if(quickm(i,2,p)==a){
25             if(t==0) printf("%d",i);
26             else printf(" %d",i);
27             t++;
28         }
29     }
30     if(t==0) printf("No Solution\n");
31     else printf("\n");
32     printf("\n");
33     return 0;
34 }