HDU——2824 The Euler function
The Euler function
Input
题目大意:
给出n,m,你需要求出从n到m所有欧拉函数的值。
思路:
先看代码吧。。。。
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 3000010
using namespace std;
int n,m;
long long ans,phi[N];
void get_phi()
{
phi[]=;
;i<=N;++i)
{
) phi[i]=i;
;
}
phi[]+=phi[];
;i<=N;i+=)
{
if(phi[i]==i)
for(int j=i;j<=N;j+=i)
phi[j]=phi[j]/i*(i-);
phi[i]+=phi[i-],phi[i+]+=phi[i];
}
}
int main()
{
get_phi();
while(~scanf("%d%d",&n,&m))
{
ans=phi[m]-phi[n-];
printf("%lld\n",ans);
}
;
}
哈哈,看不明白对吧
显然,我也看不明白。。。。
好了,大体说说吧。 我们还是用欧拉函数来解这道题(废话(#‵′)凸)
但是我们显然不能直接暴力枚举(为什么??)(T成狗啊!!!!)可能您写的好看说不定就过了是吧(虽然不大可能吧。。。。因为有多组数据啊(无奈 )),反正我是T成狗了。。。。
既然这样不行,那我们就找个方便一点的做法。这是有的大佬就想到了,要不我们打个欧拉函数表吧(说白了就是打个表,用个数组把每个欧拉函数值都存起来)(蒟蒻头一回听说这个东西,长见识),不过好像还是T。。。。因为我们有多组数据,对于每一组数据我们都要o(n)查询
我们再找个方便一点的做法,要不我们用一个前缀和吧。(欸,好像可行。。。)这样我们就只需要处理一次,再对于每一组询问o(1)查询就好了
当然又有人要问了,怎么处理?? 这个。。。。蒟蒻表示也不太懂,但我还是尽量说明白吧(若果有明显错误的地方,请不要听我瞎bibi)
首先我们先把数据处理到N(为什么?? 因为这样我们可以只处理一次,减小时间复杂度啊。 可是这样我们不就多处理了很多吗??那时间复杂度不是更高了吗?? ORZ,因为我们是有多组数据啊,我们不知道他最大的m是几啊,省得我们再对于每一组询问都要处理一次了),对于循环到的数,我们先判断她是奇数还是偶数,如果是偶数的话,那么就先把他的欧拉函数值附成i/2(为什么?? 你看啊,2的欧拉函数值是不是1,4的欧拉函数值是不是2,6的欧拉函数值是不是2,8的欧拉函数值是不是4.。。。。。。这样是不是就可以推出n(为偶数)的欧拉函数值一定比n/2小 好吧,我们可以这样想,偶数一定与偶数不互质,那么我们就排除了n/2个数)如果是奇数的话我们就把他的欧拉函数值附成i,接下来我们再进行一遍循环,来筛掉与每个数不互质的数的个数。
for(int i=3;i<=N;i+=2)//这个地方我们只循环奇数,因为对于偶数我们前面已经把与他一定不互质的数(偶数)排除了,那么如果
{ //这个数还有与她不互质的数,那么这个最大公约数一定是奇数,不然一定早被筛掉了。。。。。
if(phi[i]==i)//如果这个数没有被处理过
for(int j=i;j<=N;j+=i)//跟欧拉筛一样是每个数都被他最小的因子所筛去
phi[j]=phi[j]/i*(i-1);//欧拉函数公式
phi[i]+=phi[i-1],phi[i+1]+=phi[i];//计算前缀和
}
应该明白了吧。。。。
HDU——2824 The Euler function的更多相关文章
- hdu 2824 The Euler function(欧拉函数)
题目链接:hdu 2824 The Euler function 题意: 让你求一段区间的欧拉函数值. 题解: 直接上板子. 推导过程: 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质 ...
- hdu 2824 The Euler function
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 2824 The Euler function 欧拉函数打表
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2824 The Euler function --------欧拉模板
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU - 2824 The Euler function 欧拉函数筛 模板
HDU - 2824 题意: 求[a,b]间的欧拉函数和.这道题卡内存,只能开一个数组. 思路: ϕ(n) = n * (p-1)/p * ... 可利用线性筛法求出所有ϕ(n) . #include ...
- hdu 2824 The Euler function(欧拉函数)
如果打表的话会超内存,我想到了一种方法解决这个问题.题目给出的数据时3000000,我将三百万分成300个数据,将整万的数据存储下来,计算的时候,先计算x和y之间整万的数据,然后再计算零散数据. 想法 ...
- HDU——T 2824 The Euler function
http://acm.hdu.edu.cn/showproblem.php?pid=2824 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 欧拉函数 & 【POJ】2478 Farey Sequence & 【HDU】2824 The Euler function
http://poj.org/problem?id=2478 http://acm.hdu.edu.cn/showproblem.php?pid=2824 欧拉函数模板裸题,有两种方法求出所有的欧拉函 ...
- HDU 2824.The Euler function-筛选法求欧拉函数
欧拉函数: φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1.p2…pk为n的所有素因子.比如:φ(12)=12*(1-1/2)(1-1/3)=4.可以用类似求素数的筛 ...
随机推荐
- Linux环境下卸载、安装及配置MySQL5.1
Linux环境下卸载原有MySQL5.1数据库,并重新安装MySQL数据库的示例记录. 一.卸载MySQL 查看主机中是否安装了MySQL数据库: [root@RD-viPORTAL- ~]# rpm ...
- 使用wkwebview后,页面返回不刷新的问题
onpageshow 事件在用户浏览网页时触发. onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 ...
- Using 10053 Trace Events and get outline
When it comes to performance tuning, we can spend time on one or both ends of the problem. On the &q ...
- 每天学点Linux命令之Linux-Shell中的数据重定向与管道命令
在Linux shell中, 数据重定向使用 > < 符号,管道命令使用 | 符号链接前后两个命令. 具体区别如下: 数据重定向 1.(>): 左侧应该有标准输出 > 右侧只能 ...
- centos服务器/dev/xvda1空间占满的解决方法
突然线上Centos的机器磁盘空间占满报警,第一反映是日志文件很大,占用了较多的磁盘空间.于是简单的上去看了一下.但是发现线上不是的地址对应的空间占的并不多.用:df -h 命令看了一下,/dev/x ...
- leetcode523 Continuous Subarray Sum
思路: 令sum[p]表示p位置的前缀和.如果sum[i] % k == sum[j] % k (j - i > 1),则存在子段(i, j]的和能够整除k. 实现: class Solutio ...
- AndroidStudio3.0 Canary 8注解报错Annotation processors must be explicitly declared now.
体验最新版AndroidStudio3. Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ' ...
- 左耳听风 ARTS Week 001
要求:1.每周至少做一个 leetcode 的算法题 2.阅读并点评至少一篇英文技术文章 3.学习至少一个技术技巧 4.分享一篇有观点和思考的技术文章 1.每周至少做一个 leetcode 的算法题 ...
- Ansible基于playbook批量修改主机名实战
Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...
- js实现汉字中文排序的方法 例如:省市列表的排序
localeCompare() 1.数组内的元素是中文字符串的简单排序 var arr = ['南京', '北京', '上海', '杭州', '深圳']; function sortChinese ( ...