码迷,mamicode.com
首页 > 其他好文 > 详细

[bzoj1041]圆上的整点

时间:2019-10-28 10:31:13      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:ide   gif   play   hid   范围   src   isp   pac   click   

设$x^2+y^2=n^2$,令$d=gcd(x,y)$,那么$n‘^2=x‘^2+y‘^2$,即$y‘=\sqrt{n‘^2-x‘^2}$
由于$gcd(n‘+x‘,n‘-x‘)=1$,因此$n‘+x‘$和$n‘-x‘$都应该是完全平方数
由于d是n的约数,所以枚举d,令$n‘-x‘=a^2$,暴力枚举a(范围为$\sqrt{n/d}$)并判定$n‘+x‘$是否是完全平方数以及x‘和y‘是否互素
最终总复杂度为$o(n^{3/4}logn)$(同洲阁筛),可以通过本题

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,ans;
 4 int gcd(int n,int m){
 5     if (!m)return n;
 6     return gcd(m,n%m);
 7 }
 8 void tot(int n){
 9     for(int i=1;i*i<=n;i++){
10         int x=(int)sqrt(2LL*n-i*i);
11         if ((1LL*x*x-n==n-i*i)&&(gcd(i,x)==1)&&((x>1)||(i>1)))ans++;
12     }
13 }
14 int main(){
15     scanf("%d",&n);
16     for(int i=1;i*i<=n;i++)
17         if (n%i==0){
18             tot(i);
19             if (i*i!=n)tot(n/i);
20         }
21     printf("%d",8*ans+4);
22 }
View Code

 

[bzoj1041]圆上的整点

标签:ide   gif   play   hid   范围   src   isp   pac   click   

原文地址:https://www.cnblogs.com/PYWBKTDA/p/11750744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!