版权声明:未经本蒟蒻同意,请勿转载本蒻博客 https://blog.csdn.net/wddwjlss/article/details/83342435
题意:问有几个无序二元组 满足 , 。无序二元组是指,如果 , 和 只算一次。
首先我们将式子化成方程形式: ,其中 为已知常数,我们将 也看做一个常数,我们发现解的情况就是 ,也就是小于 并且与 互质的数的个数,即 。如果 ,那么 一定会各出现一次,也就是被多算了一次,而这个东西的值即为 ,但是其中 的情况只有一次。设满足 的 有 个,答案即为 。注意当 时答案为 ,因为 。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int p,ans,num;
int phi(int n)
{
int ans=n,a=n;
for(int i=2;i*i<=a;i++)
{
if(a%i==0)
{
ans=ans/i*(i-1);
while(a%i==0)
a/=i;
}
}
if(a>1)
ans=ans/a*(a-1);
return ans;
}
int main()
{
cin>>p;
for(int i=1;i<p;++i)
if((1ll*i*i)%p==1)
num++;
if(p==1)
{
cout<<"1";
return 0;
}
cout<<(phi(p)+num)/2;
return 0;
}