P4714 「数学」约数个数和
题解:
会了Miller-Rabin这题就很简单了
首先这种题很容易想到质因数分解
但是暴力根号算法是不行的
所以要用到
Miller-Rabin素数
https://blog.csdn.net/ltyqljhwcm/article/details/53045840
对于要判断的数n
1.先判断是不是2,是的话就返回true。
2.判断是不是小于2的,或合数,是的话就返回false。
3.令n-1=u*2^t,求出u,t,其中u是奇数。
4.随机取一个a,且1<a<n
/*根据费马小定理,如果a^(n-1)≡1(mod p)那么n就极有可能是素数,如果等式不成立,那肯定不是素数了
因为n-1=u*2^t,所以a^(n-1)=a^(u*2^t)=(a^u)^(2^t)。*/
5.所以我们令x=(a^u)%n
6.然后是t次循环,每次循环都让y=(x*x)%n,x=y,这样t次循环之后x=a^(u*2^t)=a^(n-1)了
7.因为循环的时候y=(x*x)%n,且x肯定是小于n的,正好可以用二次探测定理,
如果(x^2)%n==1,也就是y等于1的时候,假如n是素数,那么x==1||x==n-1,如果x!=1&&x!=n-1,那么n肯定不是素数了,返回false。
8.运行到这里的时候x=a^(n-1),根据费马小定理,x!=1的话,肯定不是素数了,返回false
9.因为Miller-Rabin得到的结果的正确率为 75%,所以要多次循环步骤4~8来提高正确率
10.循环多次之后还没返回,那么n肯定是素数了,返回true
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int kk=;
ll n;
ll C(ll x,ll y)
{
if (y==) return(x);
if (y%==) return(((C(x,y/)*)%n+x)%n);
else return((C(x,y/)*)%n);
}
ll M(ll x,ll y)
{
if (y==) return(x);
ll tmp=M(x,y/);
if (y%==) return(C(C(tmp,tmp),x));
else return(C(tmp,tmp));
}
bool pd()
{
if (n==) return ;
if (n<) return ;
ll m=n-;
int k=;
while (!(m&))
{
k++; m>>=;
}
for (int i=;i<=kk;i++)
{
ll x1=rand()%(n-)+;
ll x2=M(x1,m);
ll y=;
for (int j=;j<=k;j++)
{
y=C(x2,x2);
if (y==&&x2!=&&x2!=n-) return ;
x2=y;
}
if (y!=) return ;
}
return ;
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
while (cin>>n)
{ if (pd()) cout<<"T"; else cout<<"F";
cout<<endl;
}
return ;
}
Pollard-rho算法:
P4714 「数学」约数个数和的更多相关文章
- 洛谷 P4714 「数学」约数个数和 解题报告
P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...
- luogu 6月月赛 E 「数学」约数个数和
题面在这里! 第一眼感觉炒鸡水啊...只要把N质因数分解一下,因为k次约数相当于求k+2元一次方程的非负整数解,所以答案就是和每个质因子指数有关的一些组合数乘起来. 但是要用pillard's rho ...
- 【LGP4714】「数学」约数个数和
题目 众所周知,除数个数函数\(\sigma_0=I^2\),\(I\)就是狄利克雷卷积里的\(1\)函数 于是熟悉狄利克雷卷积的话很快就能看出我们要求的就是\(I\times I^{k}\),即\( ...
- 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」
题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...
- 「10.8」simple「数学」·walk「树上直径」
A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能 ...
- Codeforces 626E Simple Skewness 「数学」「二分」
题意: 给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大. 数字的个数n<=2e5 0<=xi<=1e6. 思路: 首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数 ...
- Loj 3058. 「HNOI2019」白兔之舞
Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...
- 「MoreThanJava」计算机发展史—从织布机到IBM
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「MoreThanJava」一文了解二进制和CPU工作原理
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
随机推荐
- sqlite处理数据
# coding: UTF-8 import platform from _utils.patrol2 import run_cmd, data_format, report_format impor ...
- 【转】C++拷贝构造函数详解
一.什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: ; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对象拷贝 ...
- you-get 2017-06-02
可下载优酷土豆的1080p视频 修订版本 针对最近优酷土豆升级后无法下载的问题进行修改 需要安装 python3 和 ffmpeg http://pan.baidu.com/s/1c2hBCe0
- 转换简体中文和繁体中文 cconv-0.6.2 for win32 static
dos状态下 chcp 65001 echo "转换简体中文和繁体中文"|cconv -f utf-8 -t utf8-tw 显示 "轉換簡體中文和繁體中文" ...
- vue路由vue-router的使用
对于单页应用,官方提供了vue-router进行路由跳转的处理. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router --save 当然,官方采用了多种 ...
- Android Studio下载
最新版本的Android Studio 2.1 RC下载地址: Windows: https://dl.google.com/dl/android/studio/ide-zips/2.1.0.8/an ...
- Go语言从入门到放弃(二) 优势/关键字
本来这里是写数据类型的,但是规划了一下还是要一步步来,那么本篇就先介绍一下Go语言的 优势/关键字 吧 本章转载 <The Way to Go>一书 Go语言起源和发展 Go 语 言 起 ...
- 29)django-ORM连表结构
连表结构 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.OneToOneField(其他表) 应用场景: ...
- vue-fetch
1.安装命令“ cnpm install --save isomorphic-fetch es6-promise 2.由于ie不支持Promise,所以需要安装promise-polyfill; cn ...
- STM32L476应用开发之七:流量的PID控制
在气体分析仪使用过程中,为了力求分析结果的准确性,一般要求通过的气体流量尽可能的稳定.为了保证流量控制的稳定,我们采用PID调节来控制气路阀门的开度. 1.硬件设计 我们采用的流量计为气体质量流量计, ...