3,882
社区成员




#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
const int MOD=100000;
int mod[100005],modd[100005],cont;
long long int quickmod(int x,int &n)
{
long long res=1,A=x;
while(x)
{
if(x&1) res=(res*A)%n;
x>>=1;
A=(A*A)%n;
}
return res%n;
}
void init(int &n)
{
for(int i=1; i<n; i++)
{
mod[i]=quickmod(i,n);
}
return ;
}
void solve(int &n)
{
int l=1,r=n-1;
while(l<=r)
{
if(modd[l]==mod[r])
{
// cont++,r--,l++;
int zuo=0,you=0;
for(int i=l;i;i++)
if(modd[i]==modd[l]) zuo++;
else break;
for(int j=r;j;j--)
if(mod[j]==mod[r]) you++;
else break;
cont+=zuo*you;
r-=you,l+=zuo;
}
else if(modd[l]>mod[r])
r--;
else
l++;
/*
r=n;
int summ=mod[l]+mod[r];
if(summ<n) break;
while(r>l)
{
int sum=mod[l]+mod[r--];
if(sum<n) break;
if((sum)%n==0) cont++;
}
*/
}
return ;
}
/*
http://paste.ubuntu.com/15666485/
*/
int main()
{
freopen("in.txt", "r", stdin);
freopen("outtt.txt", "w", stdout);
int t;
scanf("%d",&t);
while(t--)
{
memset(mod,0,sizeof(mod));
int n;
cont=0;
scanf("%d",&n);
init(n);
/*
for(int i=1; i<n; i++)
printf("%d ",mod[i]);
printf("\n");*/
sort(mod+1,mod+n);
for(int i=1; i<n; i++)
modd[i]=n-mod[i];
/*
for(int i=1; i<n; i++)
printf("%d ",mod[i]);
printf("\n");
for(int i=1; i<n; i++)
printf("%d ",modd[i]);
printf("\n");*/
solve(n);
printf("%d,",cont);
}
return 0;
}
#include <iostream>
#include <cstdio>
/*#include <cstring>*/
#include <algorithm>
/*
#include <cmath>
#include <stack>
#include <queue>
*/
using namespace std;
const int MOD=100000;
int mod[100005],modd[100005],cont;
long long int quickmod(int x,int &n)
{
long long res=1,A=x;
while(x)
{
if(x&1) res=(res*A)%n;
x>>=1;
A=(A*A)%n;
}
return res%n;
}
void init(int &n)
{
for(int i=1; i<n; i++)
{
mod[i]=quickmod(i,n);
}
return ;
}
void solve(int &n)
{
/* int l=1,r=n-1;
while(l<=r)
{
if(modd[l]==mod[r])
{
cont++,r--,l++;
int zuo=0,you=0;
for(int i=l;i;i++)
if(modd[i]==modd[l]) zuo++;
else break;
for(int j=r;j;j--)
if(mod[j]==mod[r]) you++;
else break;
cont+=zuo*you;
r-=you,l+=zuo;
}
else if(modd[l]>mod[r])
r--;
else
l++;
/*
r=n;
int summ=mod[l]+mod[r];
if(summ<n) break;
while(r>l)
{
int sum=mod[l]+mod[r--];
if(sum<n) break;
if((sum)%n==0) cont++;
}
* /
}*/
sort(mod+1,mod+n);
for(int i = 0 ,j = 1; i < n && j < n ; i++)
{
while(mod[j] == i)
{
modd[i]++;
j++;
}
}
cont += 2*modd[0]*modd[0];
for(int i = 1 ; i < n ; i++)
{
cont += modd[i]*modd[n-i];
}
cont /= 2;
return ;
}
int main()
{
/* freopen("in.txt", "r", stdin);
freopen("outtt.txt", "w", stdout);
*/ int t;
scanf("%d",&t);
while(t--)
{
memset(mod,0,sizeof(mod));
memset(modd,0,sizeof(modd));
int n;
cont=0;
scanf("%d",&n);
init(n);
/*
for(int i=1; i<n; i++)
printf("%d ",mod[i]);
printf("\n");*/
/*
sort(mod+1,mod+n);
for(int i=1; i<n; i++)
modd[i]=n-mod[i];
*/
/*
for(int i=1; i<n; i++)
printf("%d ",mod[i]);
printf("\n");
for(int i=1; i<n; i++)
printf("%d ",modd[i]);
printf("\n");*/
solve(n);
printf("%d,",cont);
}
return 0;
}
仅供参考.