题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041

题意:

  给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^2的圆周上,有多少个坐标为整数的点。

题解:

  科普视频:http://www.bilibili.com/video/av12131743/

  推导的大致思路:

  

  推导:

    一、17 = 4^2 + 1^2

      求圆周上有多少个点,就是求有多少个整数对(a,b)满足a^2 + b^2 = R^2。

    二、17 = (4+i)*(4-i)

      变形:a^2 + b^2 = (a + b*i) * (a - b*i) = R^2。

      其中,a + b*i 与 a - b*i 复共轭。

      也就是将R^2分解成(a + b*i) * (a - b*i)。

      有一个结论,对于整数a来说:

        (1)如果a为4n + 1型的素数,则a可以被分解为两个不同的高斯素数。

        (2)如果a为4n + 3型的素数,则不能被分解。因为它们不仅是普通素数,还是高斯素数。

      (即费马平方和定理:只有4n+1型的素数,才能表示成两个数的平方和)

      分解方法:

        (1)首先将R^2分解质因数,R^2 = a1^p1 + a2^p2 +...

        (2)然后将R^2继续分解成若干高斯素数之积。

        (3)将这些高斯素数分成两组,如果这两组各自之积复共轭,则为一对合法的(a,b)。

      其中,将高斯素数分组时,对于一个素因子ai,有pi+1中分组方法。

      特别地,2^k对于最终答案没有影响。

      根据乘法原理,在能够分组(分成复共轭数)的前提下,最终的分组方法数 = 4*∏(pi+1)。

      (这就是本题的做法。分解质因数,复杂度O(sqrt(N)))

    三、积性函数χ(n),求π的表达式(这部分跟此题无关)

      对于函数χ(n),定义为:

        (1)n = 4k + 1时,χ(n) = 1

        (2)n = 4k + 3时,χ(n) = -1

        (3)n为偶数时,χ(n) = 0

      函数χ(n)对于任意整数满足性质:χ(ab) = χ(a)*χ(b),所以χ(n)为积性函数。

      将圆上点的数量写成如下形式:

      

      即:N = 4*∏(∑ χ(ki)),ki为R^2的因子。

      将上式拆开,每一项χ(n)的n为R的因子:

      

      圆内所有点的个数:

      

      移动之后:

      

      所以得到了圆内点的个数,也就是圆面积的另一种表达形式。

      最终得到了一个π的表达式。

      

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; long long n;
long long ans=; int main()
{
cin>>n;
n=n*n;
long long t=n;
while(!(t&)) t>>=;
for(int i=;i*i<=n && t>;i++)
{
int p=;
while(t%i==)
{
p++;
t/=i;
}
if(i%==) ans*=(p+);
else if(i%== && (p&))
{
ans=;
break;
}
}
if(t%==) ans=;
cout<<ans*<<endl;
}

BZOJ 1041 [HAOI2008]圆上的整点:数学的更多相关文章

  1. bzoj 1041: [HAOI2008]圆上的整点 数学

    1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  2. BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4210  Solved: 1908[Submit][Sta ...

  3. BZOJ 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3621  Solved: 1605[Submit][Sta ...

  4. bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 853[Submit][Stat ...

  5. BZOJ 1041 [HAOI2008]圆上的整点:数学【费马平方和定理】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...

  6. BZOJ(2) 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4966  Solved: 2258[Submit][Sta ...

  7. 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4298  Solved: 1944[Submit][Sta ...

  8. 【BZOJ】1041: [HAOI2008]圆上的整点(几何)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1041 所谓的神题,我不会,直接题解..看了半天看懂题解了.详见hzwer博客 这题呢,我只能 ...

  9. 1041: [HAOI2008]圆上的整点 - BZOJ

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数.Input rOutput 整点个数Sample Input4Sample Output4HINT n ...

随机推荐

  1. RAISERROR

    RAISERROR 可以抛出一个错误,并被程序捕获,在存储过程经常使用: 是否进入Catch代码执行区域,在于错误严重等级设置 RAISERROR ('无效数据', 11 , 1) 第一个参数:自定义 ...

  2. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  3. yum安装mariadb-galera同步

    节点             ip地址      hostname                            系统版本   程序版本 node1 10.4.90.90 mysql1 db1 ...

  4. python 求解线性方程组

    Python线性方程组求解 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了.比如我们要求以下方程的解,这是一个非齐次线性方程组: 3x_1 + x_2 - ...

  5. python tornado 实现类禅道系统

    最近楼主加班 喽, 好久没有更新我的博客了,哎,一言难尽,废话我就不说了,来开始上精华. 背景:目前市面上有很多bug管理工具,但是各有各的特点,最著名,最流行的就是禅道,一个偶然的机会接触到了pyt ...

  6. linux命令每日一练:find与rm实现查找并删除目录或文件

    linux命令每日一练 linux中find与rm实现查找并删除目录或文件 linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件 find 要查找的目录名 -name .s ...

  7. java--整理下关于static关键字的知识

    如果将域定义为static,每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.--<java核心技术> 使用static的两种情形:1.只想为某特定域分配单一存储 ...

  8. 201521123111《Java程序设计》第12周学习总结

    本次作业参考文件 正则表达式参考资料 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String ...

  9. 201521123005 《Java程序设计》 第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  10. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...