BZOJ 4802 欧拉函数
4802: 欧拉函数
Description
Input
Output
Sample Input
Sample Output
当n较小的时候,若要算出所有的phi(i),那么欧拉筛明显是最优的,线性空间线性时间。
若只需算出固定n对应的前缀和∑phi(i),那很明显,不必算出所有的phi(i)。
对于这种前缀和∑f(i)的计算,若使用杜教“筛”(这并不是素数筛),需要构造一个h=f*g(*指狄利克雷卷积),且前缀和∑g(i)与前缀和∑h(i)可以十分方便地算出。然后经过一系列较为方便的演算,做到大事化小递归求解。如果预先打表O(n^(2/3)),此时复杂度最优为O(n^(2/3))。
我们可以发现,杜教筛对f的要求很苛刻。但是,洲阁筛使用了完全不同的思路。只要f(i)是多项式的,那么我们可以想到类似DP的方法。这样原始是O(n^(3/2))即O(n*sqrt(n))的,但通过各种优化可以压至O(n^(3/4)/log n)的级别。
最后,说一下此题的方法。
- Miller-Rabin质数检验方法:
直观想法我们直接取若干个a,如果都有一个不满足,那么p就是合数。
遗憾的是,存在Carmichael数:你无论取多少个a,有一个不满足,算我输。
比如:561 = 11*51就是一个Carmichael数。

那么,额。。所以我们需要改进算法。
首先有:如果p是素数,x是小于p的正整数,且x^2 mod p = 1,那么要么x=1,要么x=p-1
(这个废话,x=p-1模意义下等于x=-1)
然后我们可以展示下341满足2^340 mod 341 = 1,却不是素数(341=31*11)的原因:
2^340 mod 341 = 1
2^170 mod 341 = 1
2^85 mod 341 = 32
(32这个数很那啥啊怎么不等于340也不等于1啊。。这明显有内幕嘛32*32=1024,1024=341*3+1)
那么就能说明这个数不是素数。
如果是素数,一定是从p-1变到1,或是把所有2的次幂去除完,本来就等于1(这样平方完就一直是1了)
所以要么把所有2的次幂去除完,本来就等于1,要么存在某一个次幂=p-1(这样就正常多了)
这就是Miller-Rabin素数验证的二次探测。
应该来说Miller-Rabin算法也是挺好写的
其中mul(a,b,c)表示a*b%c(因为a*b会爆longlong,所以用快速加)
好了下一个是Pollard-Rho算法:
如果现在拆分的是n:Pollard-Rho(n)
主要流程:Miller-Rabin判断是否质数,是返回,否就试图找出其中一个因子d,然后递归做Pollard-Rho(d)和Pollard-Rho(n/d)。
BZOJ 4802 欧拉函数的更多相关文章
- BZOJ 4802 欧拉函数(Pollard_Rho)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4802 [题目大意] 已知N,求phi(N),N<=10^18 [题解] 我们用P ...
- BZOJ 4802: 欧拉函数 (Pollard-Rho)
开始一直T,原来是没有srand- CODE #include<bits/stdc++.h> using namespace std; typedef long long LL; vect ...
- [BZOJ]4805: 欧拉函数求和
解题思路类似莫比乌斯函数之和 题目大意:求[1,n]内的欧拉函数$\varphi$之和.($n<=2*10^{9}$) 思路:令$ M(n)=\sum_{i=1}^{n}\varphi (i) ...
- [bzoj 2818]欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 枚举最大公约数,对于每一个质数p,只需要求出1<=x,y<=(n/p)范 ...
- BZOJ 2190 欧拉函数
思路: 递推出来欧拉函数 搞个前缀和 sum[n-1]*2+3就是答案 假设仪仗队是从零开始的 视线能看见的地方就是gcd(x,y)=1的地方 倒过来一样 刨掉(1,1) 就是ans*2+1 再加一下 ...
- BZOJ 4805: 欧拉函数求和 杜教筛
https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...
- 【刷题】BZOJ 4805 欧拉函数求和
Description 给出一个数字N,求sigma(phi(i)),1<=i<=N Input 正整数N.N<=2*10^9 Output 输出答案. Sample Input 1 ...
- bzoj 2818 GCD 数论 欧拉函数
bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
随机推荐
- spring 在ssh三大框架中充当的角色
https://blog.csdn.net/yeah_nn/article/details/79992777
- Oz 创建Ubuntu镜像
参考链接: http://blog.csdn.net/gcogle/article/details/52767135http://tlinux.blog.51cto.com/7288656/17497 ...
- python3去除字符串中括号及括号里面的内容
a = """ <option value="search-alias=arts-crafts-intl-ship">Arts & ...
- python2.6更改为Python2.7
文中为Python2.6.6,改为Python2.6即可,因为没有/usr/bin/python2.6.6,只有/usr/bin/python2.6 http://blog.csdn.net/jcjc ...
- maven学习资料(三)
两个项目聚合到一个项目中: .
- 常用DB2命令
建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...
- java小学生四则运算带面板版 但我不知道为什么同类变量却进不了动作监听中去
---恢复内容开始--- package yun; import java.util.*; import java.awt.*; import java.awt.event.ActionEvent; ...
- 【CS231N】3、Softmax分类器
wiki百科:softmax函数的本质就是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间. 一.疑问 二.知识点 1. softmax函数公式 ...
- AVMoviePlayer 视频播放器
AVMoviePlayer 是使用系统框架 MPMoviePlayerController 封装的视频播放器 一.功能: 1.根据手机旋转自由切换横竖屏:2.手势轻点显示/隐藏topView/bott ...
- 消息队列第一篇:MessageQueue介绍
消息队列有哪些好处或功能: 1.消息可以在断开连接的环境下发送.不需要同时运行正在发送和正在接收的应用程序. 2.使用快捷模式,消息可以非常快地发送.在快捷模式下,消息存储在内存中. 3.对于可恢复的 ...