zoukankan      html  css  js  c++  java
  • 【bzoj1041】[HAOI2008]圆上的整点 数论

    题目描述

    求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。

    输入

    只有一个正整数n,n<=2000 000 000

    输出

    整点个数

    样例输入

    4

    样例输出

    4


    题解

    数论

    #include <cmath>
    #include <cstdio>
    typedef long long ll;
    ll judge(ll k)
    {
    	ll t = (ll)sqrt(k);
    	return t * t == k ? t : 0;
    }
    ll gcd(ll a , ll b)
    {
    	return b ? gcd(b , a % b) : a;
    }
    ll calc(ll k)
    {
    	ll i , t , ans = 0;
    	for(i = 1 ; i * i <= k / 2 ; i ++ )
    	{
    		t = judge(k - i * i);
    		if(t && gcd(i , t) == 1) ans ++ ;
    	}
    	return ans;
    }
    int main()
    {
    	ll n , i , ans = 0;
    	scanf("%lld" , &n);
    	for(i = 1 ; i * i <= 2 * n ; i ++ )
    	{
    		if(2 * n % i == 0)
    		{
    			ans += calc(i);
    			if(i * i != 2 * n) ans += calc(2 * n / i);
    		}
    	}
    	printf("%lld
    " , ans * 4);
    	return 0;
    }
    
  • 相关阅读:
    线程同步技术
    线程调用
    进程与线程
    网络配置
    vi
    文件系统
    系统管理命令
    Linux常用命令
    Shell编程
    新版chrome touch警告处理办法
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/7397196.html
Copyright © 2011-2022 走看看