[BZOJ]1045 圆上的整点(HAOI2008)
数学题第二弹!
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
Input
一个正整数r。
Output
整点个数。
Sample Input
4
Sample Output
4
HINT
r<=2000 000 000
Solution
小C不想写题解啊啊啊啊!!!!
题解在这里啊啊啊啊!!!!(看完记得投币!!!!)
我爱数学啊啊啊啊!!!!
开玩笑的,还是说一说题解吧。
相信如果你认真看完了上面那个视频的前25min,心里肯定已经有不下一万种解法了。
小C先口胡两句,你们意会就好。
题目要我们求的是以原点为圆心,半径为
的圆经过了多少个整点。
所以我们只要把
的所有因数的
函数值相加的和乘上4就是答案。
请完全无视上面两行!完全无视!现在说正经的:
根据我们的知识储备,我们知道,对于圆
。
将a进行质因数分解,得
。
如果存在i使得
且
为奇数,那么该圆不经过任何整点。
否则答案就是
。
根据上面的结论,由于题目中的a是完全平方数,所以不存在di为奇数的情况,因此必定经过整点。
所以我们只要把r质因数分解,挑出其中形如4k+1的质数,该质数的指数为d,对答案的贡献就是乘上2*d+1。
时间复杂度是质因数分解的
。
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MN 60005
using namespace std;
int n,ans,pin,pri[MN];
bool u[MN]; inline int read()
{
int n=,f=; char c=getchar();
while (c<'' || c>'') {if(c=='-')f=-; c=getchar();}
while (c>='' && c<='') {n=n*+c-''; c=getchar();}
return n*f;
} int main()
{
register int i,j,lt;
n=read(); ans=;
for (i=;1LL*i*i<=n;++i)
{
if (!u[i]) pri[++pin]=i;
for (j=;1LL*i*i*pri[j]*pri[j]<=n;++j)
{
u[i*pri[j]]=true;
if (i%pri[j]==) break;
}
}
while (n%pri[]==) n/=pri[];
for (i=;i<=pin;++i)
{
for (lt=;n%pri[i]==;++lt) n/=pri[i];
if (pri[i]%==) ans*=lt<<|;
}
if (n!=&&n%==) ans*=;
printf("%d",ans<<);
}
Last Word
我在B站学数学.jpg
开什么玩笑!B站本来就是优秀的在线学习网站!(小C口胡不下去了)
[BZOJ]1045 圆上的整点(HAOI2008)的更多相关文章
- BZOJ 1041 圆上的整点
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1041 题意:求圆x^2+y^2=r^2上的整点. 思路:由于对称性,我们只需要计算第一象 ...
- BZOJ 1041 圆上的整点 数学
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整 ...
- bzoj 1041 圆上的整点 分类: Brush Mode 2014-11-11 20:15 80人阅读 评论(0) 收藏
这里先只考虑x,y都大于0的情况 如果x^2+y^2=r^2,则(r-x)(r+x)=y*y 令d=gcd(r-x,r+x),r-x=d*u^2,r+x=d*v^2,显然有gcd(u,v)=1且u&l ...
- BZOJ 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3621 Solved: 1605[Submit][Sta ...
- bzoj 1041: [HAOI2008]圆上的整点 数学
1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 853[Submit][Stat ...
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4210 Solved: 1908[Submit][Sta ...
- bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点
http://www.lydsy.com/JudgeOnline/problem.php?id=1041 设 X>0 ,Y>0 X^2 + Y^2 = R^2 X^2 = R^2-Y^2 ...
- BZOJ(2) 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4966 Solved: 2258[Submit][Sta ...
随机推荐
- iOS开发点滴-添加阴影效果
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:_backView.bounds]; _backView.layer.masks ...
- 201421123042 《Java程序设计》第8周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: 答:查找 ...
- Code::Blocks出现64-Bit mode not compled in解决方法
原因是:Settings->compilter你选了Target x86 _64(64bit),选择Target x86 _32(32bit)即可 废了老半天劲才找到原因,希望能让朋友们少走弯路
- JQ 上传文件(单个,多个,分片)
最原始的方式: 前端代码: <div> <span>最原始的方式</span><br /> <span>条件1:必须是 post 方式< ...
- linux——网络基础
装完linux系统要对网络(ip地址,子网掩码,网关,DNS)进行配置,才能连接网络 一,开启网卡eth0 CentOS显示没有网卡(eth0) 2.设置静态IP vim /etc/sysconfig ...
- Nginx负载均衡(架构之路)
[前言] 在大型网站中,负载均衡是有想当必要的.尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分 ...
- 使用Java High Level REST Client操作elasticsearch
Java高级别REST客户端(The Java High Level REST Client)以后简称高级客户端,内部仍然是基于低级客户端.它提供了更多的API,接受请求对象作为参数并返回响应对象,由 ...
- Tensorflow模型加载与保存、Tensorboard简单使用
先上代码: from __future__ import absolute_import from __future__ import division from __future__ import ...
- digest-MD5认证
digest-MD5认证机制是基于MD5算法的LINUX安全机制认证. 会比较用户端传送的杂凑值与使用者密码的杂凑值,以认证用户端. 但由于此机制必须读取使用者密码,因此,所有想透过digest-MD ...
- JavaScript 中常见的内存泄露陷阱(摘)
内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内 ...