zoukankan      html  css  js  c++  java
  • [bzoj1041]圆上的整点

    设$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
  • 相关阅读:
    Pull Request
    选择器
    常见HTTP状态码
    286. Walls and Gates
    200. Number of Islands
    1. Two Sum
    名片管理系统(python实现)
    k近邻算法(简单版)
    基数排序
    递归算法的调试
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11750744.html
Copyright © 2011-2022 走看看