根本不会做,看了某国外大神数论详解豁然贯通,还知道了pi=4*(1-1/3+1/5-1/7...)是怎么推的。
链接:https://www.bilibili.com/video/av12131743/
简单来说就是将二维平面看成是复数集合,那么一个圆上的整点(a,bi)必然满足(a,bi)*(a,-bi)=r*r(这样一对复数也称共轭复数,蒟蒻理解就是关于x轴对称一对点...),而共轭复数是可以分解出来的,一个质数如果模4余1可以分解为一对,模4余3不能分解(什么费马平方和定理),2毫无软用。然后这题就变为n*n分解质因数,将分出来的质数根据情况判断
#include<bits/stdc++.h>
#define iter map<int,int>::iterator
#define ll long long
using namespace std;
map<int,int>vis;
int main()
{
int n;ll ans=4;
cin>>n;
for(int i=2;i*i<=n;i++)
while(n%i==0)vis[i]+=2,n/=i;
if(n!=1)vis[n]+=2;
for(iter i=vis.begin();i!=vis.end();i++)
{
if(i->first==2)continue;
else if(i->first%4==3)
ans*=(i->second%2==0)?1:0;
else if(i->first%4==1)
ans*=(i->second+1);
}
cout<<ans;
}