【BZOJ1041】圆上的整点(数论)

时间:2022-09-13 11:02:00

【BZOJ1041】圆上的整点(数论)

题面

BZOJ

洛谷

题解

好神仙的题目啊。

安利一个视频,大概是第\(7\)到\(19\)分钟的样子

因为要质因数分解,所以复习了一下\(Pollard\_rho\)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
int n,ans=1;
int fpow(int a,int b,int MOD)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}
return s;
}
bool Miller_Rabin(int n)
{
if(n==2)return true;
for(int tim=10;tim;--tim)
{
int a=rand()%(n-2)+2,p=n-1;
if(fpow(a,p,n)!=1)return false;
while(!(p&1))
{
p>>=1;int nw=fpow(a,p,n);
if(1ll*nw*nw%n==1&&nw!=1&&nw!=n-1)return false;
}
}
return true;
}
vector<int> fac;
int Pollard_rho(int n,int c)
{
int i=0,k=2,x=rand()%(n-1)+1,y=x;
while(233)
{
++i;x=(1ll*x*x%n+c)%n;
int d=__gcd((y-x+n)%n,n);
if(d!=1&&d!=n)return d;
if(x==y)return n;
if(i==k)y=x,k<<=1;
}
}
void Fact(int n,int c)
{
if(n==1)return;
if(Miller_Rabin(n)){fac.push_back(n);return;}
int p=n;while(p>=n)p=Pollard_rho(p,c--);
Fact(p,c);Fact(n/p,c);
}
int main()
{
cin>>n;Fact(n,233);sort(fac.begin(),fac.end());
for(int i=0,l=fac.size(),pos;i<l;i=pos+1)
{
int cnt=1;
pos=i;while(pos<l-1&&fac[i]==fac[pos+1])++pos,++cnt;
if(fac[i]==2)continue;
if(fac[i]%4==1)ans=ans*(cnt*2+1);
}
printf("%d\n",ans*4);
return 0;
}

【BZOJ1041】圆上的整点(数论)的更多相关文章

  1. 【bzoj1041】&lbrack;HAOI2008&rsqb;圆上的整点 数论

    题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. 输入 只有一个正整数n,n<=2000 000 000 输出 整点个数 样例输入 4 样例输出 4 题解 数 ...

  2. BZOJ1041&colon;&lbrack;HAOI2008&rsqb;圆上的整点&lpar;数论&rpar;

    Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Samp ...

  3. bzoj1041 圆上的整点 数学

    题目传送门 题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. 思路:没思路,看大佬的博客(转载自https://blog.csdn.net/csyzcyj),转载只 ...

  4. &lbrack;BZOJ1041&rsqb;圆上的整点

    嗯... 自己看视频讲解? >Click Here< #include<cstdio> #include<queue> #include<iostream&g ...

  5. 【BZOJ1041】&lbrack;HAOI2008&rsqb;圆上的整点

    [BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(r ...

  6. BZOJ 1041&colon; &lbrack;HAOI2008&rsqb;圆上的整点【数论,解方程】

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

  7. bzoj千题计划127:bzoj1041&colon; &lbrack;HAOI2008&rsqb;圆上的整点

    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 ...

  8. BZOJ1041 &lbrack;HAOI2008&rsqb;圆上的整点 【数学】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4631  Solved: 2087 [Submit][S ...

  9. BZOJ 1041&colon; &lbrack;HAOI2008&rsqb;圆上的整点

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

随机推荐

  1. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  2. BZOJ2144&colon; 跳跳棋

    传送门 神题一道. 考虑题目性质.首先对于一个状态,只存在四种情况,即最左/右边的点跳到中间,中间的点跳到左/右.而对于一个状态,显然第一种情况的两种分支不能同时存在,那么题目就可以理解为从$(a,b ...

  3. Android 自定义 view(四)&mdash&semi;&mdash&semi; onMeasure 方法理解

    前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...

  4. 基于redis分布式锁实现&OpenCurlyDoubleQuote;秒杀”

    转载:http://blog.5ibc.net/p/28883.html 最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路. 业务场 ...

  5. EmberJs之3W

    写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...

  6. Best Time to Buy and Sell Stock &vert; &amp&semi; &vert;&vert; &amp&semi; III

    Best Time to Buy and Sell Stock I Say you have an array for which the ith element is the price of a ...

  7. preseed&period;cfg分区设定案例

    很久之前做ubuntu的PXE配置ubuntu的preseed费了很大的力气,总结的不多,现在温习一下. 就我所接触的,有分区普通磁盘,LVM,和raid三种方式.其中前两中方式比较多,raid方式是 ...

  8. Android消息机制之实现两个不同线程之间相互传递数据相互调用

    目的:实现两个不同线程之间相互传递数据相互调用方法. 线程一中定义mainHandler 并定义一个方法mainDecode 线程二中定义twoHandler 并定义一个方法twoEncode 实现当 ...

  9. Mysqlbinlog使用

    Mysqlbinlog使用   1.binlog日志打开方法 在my.cnf这个文件中加一行(Windows为my.ini).#vi /etc/my.cnf[mysqld]log-bin=mysqlb ...

  10. C&sol;C&plus;&plus;中的浮点数运算

    代码: #include <iostream> #include <cstdio> #include <cfloat> using namespace std; i ...