4802: 欧拉函数

Description

已知N,求phi(N)

Input

正整数N。N<=10^18

Output

输出phi(N)

Sample Input

8

Sample Output

4

  

  很明显,这样的题就是一道十分简单的入门题。只是N比较大,但输入和输出都还没有爆long long。如果输入高精度数,那
就很恶心了(虽然可以定义大整数类Big Int)。
  phi[n]=n∏(1-(1/p)),所以是Miller-Rabin和Pollard-Rho算法,用来分解一个大数的质因子。

  当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)的级别。

  最后,说一下此题的方法。

  摘自:http://www.cnblogs.com/galaxies/p/bzoj4802.html

  • Miller-Rabin质数检验方法:
    根据费马小定理,如果p是素数,a<p,那么有a^(p-1) mod p = 1。

    直观想法我们直接取若干个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 欧拉函数的更多相关文章

  1. BZOJ 4802 欧拉函数(Pollard_Rho)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4802 [题目大意] 已知N,求phi(N),N<=10^18 [题解] 我们用P ...

  2. BZOJ 4802: 欧拉函数 (Pollard-Rho)

    开始一直T,原来是没有srand- CODE #include<bits/stdc++.h> using namespace std; typedef long long LL; vect ...

  3. [BZOJ]4805: 欧拉函数求和

    解题思路类似莫比乌斯函数之和 题目大意:求[1,n]内的欧拉函数$\varphi$之和.($n<=2*10^{9}$) 思路:令$ M(n)=\sum_{i=1}^{n}\varphi (i)  ...

  4. [bzoj 2818]欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 枚举最大公约数,对于每一个质数p,只需要求出1<=x,y<=(n/p)范 ...

  5. BZOJ 2190 欧拉函数

    思路: 递推出来欧拉函数 搞个前缀和 sum[n-1]*2+3就是答案 假设仪仗队是从零开始的 视线能看见的地方就是gcd(x,y)=1的地方 倒过来一样 刨掉(1,1) 就是ans*2+1 再加一下 ...

  6. BZOJ 4805: 欧拉函数求和 杜教筛

    https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...

  7. 【刷题】BZOJ 4805 欧拉函数求和

    Description 给出一个数字N,求sigma(phi(i)),1<=i<=N Input 正整数N.N<=2*10^9 Output 输出答案. Sample Input 1 ...

  8. bzoj 2818 GCD 数论 欧拉函数

    bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...

  9. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

随机推荐

  1. 如何解决zabbix snmp异常超时、不稳定、时通时断:Timeout

    针对平时工作中,zabbix snmp出现异常超时.不稳定.时通时断:Timeout while connecting 等的情况,以下我将以使用乐维监控为例,进行解决方案的详细叙述.   一.问题:设 ...

  2. Dingo Api 1.0在laravel5.2中的简单应用

    Dingo Api是为基于laravel的开发提供了一系列工具集,这些工具集可以帮助开发者快速构建API.Dingo Api最新的版本是2.0.0-alpha1,这个版本需要php7.0以上的php版 ...

  3. PHP版本对比【转】

    其他历史http://www.cnblogs.com/yjf512/p/3588466.html php5.3 改动: 1.realpath() 现在是完全与平台无关的. 结果是非法的相对路径比如FI ...

  4. Daily Scrumming* 2015.11.2(Day 14)

    一.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 实现前后端整合 继续实现前后端整合 杨墨犁 修改好首页 开始实现社团页 付帅 测试api 继续测试并完 ...

  5. 2018软工实践—Beta冲刺(4)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 完成软件开发技术文稿 展示GitHub当日代码/文档签入 ...

  6. 福大软工1816 · 评分结果 · Alpha冲刺答辩总结

    作业地址:https://edu.cnblogs.com/campus/fzu/Grade2016SE/homework/2462 作业提交准则 按时交 - 有分 晚交 - 0分 迟交一周以上 - 倒 ...

  7. 剑指offer:二位数组中的查找

    准备找实习期间,复习一下数据相关内容,刷刷题. 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样 ...

  8. mvc的过滤器学习-资料查询

    标题:Filtering in ASP.NET MVC 地址:https://docs.microsoft.com/en-us/previous-versions/aspnet/gg416513(v= ...

  9. js获取浏览器窗口属性

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  10. Python库moviepy

    目录 介绍和下载安装 视频截取和拼接 视频加水印