[CF396E]On Iteration of One Well-Known Function
题意:给定$n=\prod\limits_{i=1}^mp_i^{a_i}$,求$\varphi\left(\cdots\varphi\left(n\right)\cdots\right)$(有$k$个$\varphi$)
因为$\varphi(n)=n\prod\limits_{i=1}^m\dfrac{1-p_i}{p_i}$,所以每次对一个数$n$取$\varphi$,就相当于对它的每个质因数$p$,把$n$乘上$\dfrac{p-1}p$
先筛出$10^6$内的质数,然后对$n$的每一个的质因子分别考虑
记$c_p$为当前$n$的质因数分解式中$p$的指数,$k_p$为还要对$p$这个指数执行多少次$\varphi$,每次比较$c$和$k$,可以一次执行$t=\min(c_p,k_p)$次$\varphi$(一次砍掉$t$个$p$),再把$(p-1)^t$的质因数分解加到对应的$c$即可
这样做会带来一个问题:我们执行$\varphi$时必须要用$n$的质因子$p$,而用到的$p$可能来自最近的几次质因数分解$p-1$,而这几次分解并未完全分解,所以我们对于某些执行$\varphi$多次的$p$要暂缓执行(等待之前的$p-1$被分解完),记$skip_p$表示对于$p$要跳过多少次执行$\varphi$,每次如果可以执行,那么就用$t-1$更新$skip_p$(执行完这次,还要等待$t-1$波分解其他质因子就可以继续了),否则按$skip_p$跳过几次,这样可以保证每次执行$\varphi$都优先使用原来的$p$,最后再把$p-1$分解留到以后使用
数据范围很吓人,可是这样是挺快的2333(因为如果要执行$\varphi$一次就是$\min(c_p,k_p)$,所以这两个数都减小得很快)
2018.3.28补充一些东西
$\varphi\left(\prod\limits_{i=1}^kp_i^{a_i}\right)=\prod\limits_{i=1}^k\varphi\left(p_i^{a_i}\right)=\prod\limits_{i=1}^kp_i^{a_i-1}\left(p_i-1\right)$
第一次取$\varphi$,我们可以对每个质因数分开考虑,之后的取$\varphi$操作就要小心了,如果我们对原来的$p_i$执行$\varphi$,由此产生的$p_i-1$分解之后会加到更小的$p_i$上
所以,①我们要从小到大枚举$p_i$做$\varphi$操作(因为$p_i-1$分解成更小的质数)②一次性对$p_i$做完$t$次$\varphi$之后,接下来如果当前没有$p_i$这个因子,我们要跳过这些操作(总共跳过$t-1$次)而不是直接把$k_{p_i}-1$(因为接下来同一阶段的其他的$p_i-1$分解之后有可能落到这里,我们不能忽略掉这些“新来的”$p_i$)
#include<stdio.h>
typedef long long ll;
const int T=1000000;
int p[1000010],f[1000010];
ll c[1000010],k[1000010],skip[1000010];
ll min(ll a,ll b){return a<b?a:b;}
int main(){
int m,M,i,j,x;
ll t;
bool flag;
for(i=2;i<=T;i++){
if(f[i]==0){
M++;
p[M]=i;
f[i]=i;
}
for(j=1;p[j]<=f[i]&&p[j]*i<=T&&j<=T;j++)f[p[j]*i]=p[j];
}
scanf("%d",&m);
while(m--){
scanf("%d",&x);
scanf("%I64d",c+x);
}
scanf("%I64d",&t);
for(i=1;i<=T;i++)k[p[i]]=t;
do{
flag=0;
for(i=1;i<=T;i++){
x=p[i];
if(c[x]){
if(k[x]==0)continue;
t=min(c[x],k[x]);
c[x]-=t;
k[x]-=t;
skip[x]+=t-1;
flag=1;
x--;
while(x>1){
c[f[x]]+=t;
x/=f[x];
}
}else if(skip[x])
skip[x]--;
else if(k[x])
k[x]--;
}
}while(flag);
x=0;
for(i=1;i<=T;i++){
if(c[p[i]])x++;
}
printf("%d\n",x);
for(i=1;i<=T;i++){
if(c[p[i]])printf("%d %I64d\n",p[i],c[p[i]]);
}
}
[CF396E]On Iteration of One Well-Known Function的更多相关文章
- Openfire Strophe开发中文乱码问题
网站上有很多Openfire Web方案,之前想用Smack 但是jar包支持客户端版本的,还有JDK版本问题 一直没调试成功 估计成功的方法只能拜读源码进行修改了. SparkWeb 官网代码很 ...
- python3.4 build in functions from 官方文档 翻译中
2. Built-in Functions https://docs.python.org/3.4/library/functions.html?highlight=file The Python i ...
- python3 入门 (三) 函数与lambda表达式、闭包
函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- A Neural Network in 11 lines of Python
A Neural Network in 11 lines of Python A bare bones neural network implementation to describe the in ...
- Python2.7笔记——常用技术点汇总
目录 · 概况 · 安装 · 基础 · 基础语法 · 数据类型 · 变量 · 常量 · 字符编码 · 字符串格式化 · list · tuple · dict · set · if语句 · for语句 ...
- 内置函数 -- filter 和 map
参考地址:http://www.cnblogs.com/sesshoumaru/p/6000788.html 英文文档: filter(function, iterable) Construct an ...
- CSS3动画以及animation事件
1.CSS3动画以及animation事件的定义 animation :name duration timing-function delay iteration-count direction an ...
- Python内置函数(34)——filter
英文文档: filter(function, iterable) Construct an iterator from those elements of iterable for which fun ...
随机推荐
- Codeforces Round #350 (Div. 2) A
A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- fscanf函数的应用
转摘自:http://blog.csdn.net/mxgsgtc/article/details/13005675 以前老是被从文本里读取文件,然后逐个的进行字符解析,感觉非常的慢,自从知道了fsca ...
- 计算1-1/x+1/x*x
// algo1-1.cpp 计算1-1/x+1/x*x. #include<stdio.h> #include<sys/timeb.h> void main() { time ...
- [05]Git查看、删除、重命名远程分支和tag
Git查看.删除.重命名远程分支和tag 2015-06-15:加入姊妹篇: 2013-11-06:加入重命名远程分支的内容: 2013-01-09:加入删除远程tag的内容. 姊妹篇:使用Git.G ...
- commons
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> <dependency> <g ...
- AtCoder Regular Contest 082 E
Problem Statement You are given N points (xi,yi) located on a two-dimensional plane. Consider a subs ...
- 【Python实例二】之前期准备:Windows下的BeautifulSoup安装
前言 一直久闻Python的爬虫很高效,而且操作便捷,因此决定开始练习爬虫的相关内容. 首先尝试的是Python的爬虫利器之一:BeautifulSoup.(这名字听起来就有种想要去探究的兴趣.... ...
- Linux设置编译器环境变量
Linux设置编译器环境变量 https://jingyan.baidu.com/article/9f7e7ec0bb22aa6f29155453.html Linux添加环境变量与GCC编译器添加I ...
- 【反演复习计划】【COGS2431】爱蜜莉雅的求助
出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...
- 【反演复习计划】【bzoj2820】YY的GCD
这题跟2818一样的,只不过数据水一点,可以用多一个log的办法水过去…… 原题意思是求以下式子:$Ans=\sum\limits_{isprime(p)}\sum\limits_{i=1}^{a}\ ...