Master of Phi(2017CCPC杭州站现场赛B题)(dfs)

来源:互联网 发布:vs 编程最佳字体 编辑:程序博客网 时间:2024/06/06 15:39
题目大意:给你一个数n的因数及其指数pi,qi,对于其所有的因数mi,求φ(mi)*n/mi之和。

题解:题中给了一个求欧拉函数的公式


根据这个公式,可以将第二个样例变形为


其对应因数为1,2,22,3,33,2131,2231,2132,2232可以很容易看出来,因子的指数与乘积的项无关,重复项数与其指数q有关,那么其乘积项只和其存不存在有关,再化简一下,如果用xi来表示该项存不存在,则每一项可化简为

由于质因子最多只有20项,所以dfs最多有220个状态,不会超时

dfs简易代码为

long long dfs(int i){    if(i==m+1){        return 1;    }    long long res = pow(p[i],q[i])*dfs(i+1)+pow(p[i],q[i]-1)*(p[i]-1)*q[i]*dfs(i+1);//要注意爆longlong的问题    return res;}


原创粉丝点击