可以很简单的发现,当n是奇数的时候,f(n)=φ(n),否则f(n)=0。

所以我们就是求n<=5*10^8且n为奇数的φ的和。

首先我们可以做到用杜教筛算出φ的前缀和,但是如何把偶数的减去?

我们设h(x)为1<=n<=x且n为偶数的φ的和,可以得到: h(x)=Σ(1<=i<=x/2) φ(i) + h(x/2)。

为什么这样是对的呢?

考虑一个偶数n,它在2这个质因子上的指数可能是1或者大于1两种情况。

如果指数是是1的话那么φ(n)=φ(n/2) 否则φ(n)=φ(n/2)*2。

我们显然可以先把所有偶数在2上的指数都当成1,先加上 φ的前缀和,然后再把少加的加上。

显然只有一个偶数/2之后还是偶数才需要再加上一遍他的φ,因为只有这样它在2的次数才>1。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1000000;
using namespace std;
int zs[maxn/5],t=0;
map<int,ll> mmp;
bool v[maxn+5];
ll phi[maxn+5]; inline void init(){
phi[1]=1;
for(int i=2;i<=maxn;i++){
if(!v[i]) zs[++t]=i,phi[i]=i-1;
for(int j=1,u;j<=t&&(u=zs[j]*i)<=maxn;j++){
v[u]=1;
if(!(i%zs[j])){
phi[u]=phi[i]*zs[j];
break;
}
phi[u]=phi[i]*(zs[j]-1);
}
} for(int i=1;i<=maxn;i++) phi[i]+=phi[i-1];
} inline ll getphi(int x){
if(x<=maxn) return phi[x];
if(mmp.count(x)) return mmp[x]; ll an=x*(ll)(x+1)>>1ll;
for(int i=2,j,now;i<=x;i=j+1){
now=x/i,j=x/now;
an-=(j-i+1)*getphi(now);
} mmp[x]=an;
return an;
} inline void solve(int x){
ll ans=getphi(x);
x>>=1;
while(x) ans-=getphi(x),x>>=1;
printf("%lld\n",ans);
} int main(){
init();
solve(500000000);
return 0;
}

  

PE 512 Sums of totients of powers的更多相关文章

  1. 【PE512】Sums of totients of powers(欧拉函数)

    点此看题面 大致题意: 求\(\sum_{n=1}^{5*10^8}((\sum_{i=1}^n\phi(n^i))(mod\ n+1))\). 大力推式子 单独考虑\((\sum_{i=1}^n\p ...

  2. Linux----LVM扩容磁盘空间

    Linux系统LVM扩容一个分区相对于Windows来说没有那么直观,但是熟悉命令后,扩容起来也是蛮方便的. 扩容场景如下: [root@rhel06 ~]# df -Th Filesystem Ty ...

  3. 分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)

    分配粒度和内存页面大小 x86处理器平台的分配粒度是64K,32位CPU的内存页面大小是4K,64位是8K,保留内存地址空间总是要和分配粒度对齐.一个分配粒度里包含16个内存页面. 这是个概念,具体不 ...

  4. [PE结构分析] 5.IMAGE_OPTIONAL_HEADER

    结构体源代码如下: typedef struct _IMAGE_OPTIONAL_HEADER { // // Standard fields. // +18h WORD Magic; // 标志字, ...

  5. PE文件结构部分解析以及输入的定位

    原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...

  6. 手写PE文件(二)

    [文章标题]: 纯手工编写的PE可执行程序 [文章作者]: Kinney [作者邮箱]: mohen_ng@sina.cn [下载地址]: 自己搜索下载 [使用工具]: C32 [操作平台]: win ...

  7. 手写PE文件(一)

    DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE ...

  8. 利用PE数据目录的导入表获取函数名及其地址

    PE文件是以64字节的DOS文件头开始的(IMAGE_DOS_HEADER),接着是一段小DOS程序,然后是248字节的 NT文件头(IMAGE_NT_HEADERS),NT的文件头位置由IMAGE_ ...

  9. 破解软件系列-PE文件深入浅出之Section Table节表

    我们已经学了许多关于 DOS header 和 PE header 的知识.接下来就该轮到 section table(节表)了.节表其实就是紧挨着 PE header 的一结构数组.该数组成员的数目 ...

随机推荐

  1. python操作Excel模块openpyxl

    https://www.cnblogs.com/zeke-python-road/p/8986318.html # -*- coding: utf-8 -*-from openpyxl import ...

  2. Python头脑风暴4

    IT是全国平均薪资最高的行业,2017年全国最高,人均13点4万每年. 但技术固然好,创业拼的还是世界观下的创意. 蘑菇街,并夕夕,TikTok,头条,哪个不是创意用IT技术的现实化?? 未来,大平台 ...

  3. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

  4. Python3爬虫一之(urllib库)

    urllib库是python3的内置HTTP请求库. ython2中urllib分为 urllib2.urllib两个库来发送请求,但是在python3中只有一个urllib库,方便了许多. urll ...

  5. AJAX小练习

    /index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  6. Mysql操作规范

    (1)linux下开启.关闭.重启mysql服务命令 一. 启动1.使用 service 启动:service mysql start2.使用 mysqld 脚本启动:/etc/inint.d/mys ...

  7. selenium2断言类Assert的使用

    测试中断言的重要性 一.断言的作用: 1.断言也就是检查点,重在判断我们通过页面得出来的值与期望值是否相等,如果相等,则代表断言成功,程序会继续往下执行,如果不相等,则代表断言失败,程序就会在断言失败 ...

  8. SPOJ FFT TSUM

    第一道FFT的题目. 在网上找了很多FFT的资料,但一直都看不懂,最后是看算法导论学的FFT,算法导论上面写的很详细,每一步推导过程都有严格的证明. 下面说这道题 题意: 给一个序列s,有n个不互相同 ...

  9. SpringBoot 项目打包部署Resin遇到的问题

    1)javax/validation/ParameterNameProvider 找不到. 解决:A) resin/lib 目录下删掉原来的,validation-api 更新为 validation ...

  10. 大数据学习——sparkSql对接mysql

    1上传jar 2 加载驱动包 [root@mini1 bin]#  ./spark-shell --master spark://mini1:7077 --jars mysql-connector-j ...