@MLEAutoMaton
2019-04-19T09:34:08.000000Z
字数 989
阅读 594
数学
BZOJ
神仙题,本题的思路来源于视频看了之后不会被教练抓...
设某一个数为.
若可以分解为一对形如(),()的共轭数对,那么称为高斯整数
那么显然对于某一个点保证.emmm,意味着这个点是一个符合答案的点.
考虑把分解一下,分解成两个复数的乘,那么两边显然是他的约数,相当于点?
所以分解质因数然后组合就可以了.
这样就没有了.
吗?
如果是一个不能够分解成两个共轭数对的数怎么办呢?的质数.
如果出现次数为偶数就平均分,否则就是0.
这下就没了.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in",,"r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
int f=1,sum=0;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
int n;
int main()
{
n=gi();ll ans=1;
if(n==0)return puts("1"),0;
for(int i=2;i*i<=n;i++)
if(n%i==0)
{
int ps=0;
while(n%i==0)n/=i,ps++;
if(i%4==1)ans=1ll*ans*(2*ps+1);
}
if(n>1)if(n%4==1)ans=ans*3ll;
printf("%lld\n",1ll*ans*4);
return 0;
}