Description

给定一个数的标准分解\(N= \prod_{i=1}^n p_i^{q_i}\)

其中\(p_i \le 10^5, q_i \le 10^9\)

求最小的\(x\)使得\(\varphi^x(N) = 1\) 即求这个数进行多少次\(\varphi\)后得到1

Analysis

\(\varphi\)的性质还是经常与2有关的

比若说任意\(\varphi\)两次就一定会除掉一个因子2

所以\(\varphi\)的次数为\(O(\log)\)

此题就是利用类似这样的性质

\(\varphi\)的次数为只与过程中\(2\)的总数有关

(1) 如果存在\(2\), 每次只能恰好消掉一个

(2) 对于一个奇质数因子, \(\varphi\)以下会产生至少一个\(2\), 以及若干个新的奇质数

(3) 只要奇质数还存在, 该回合内就会产生至少一个2

(4) 消完\(2\)需要的次数\(=\)因此\(2\)产生的次数 \(\ge\) 进行的回合数

(5) 最后会剩下\(2^q\), 恰好\(q\)步消完

于是我们之用求出产生2的次数即可,设为 \(f(n)\)

\(f(2)=1\)

\(f(奇质数) = f(奇质数-1)\)

\(f(pq) = f(p) + f(q)\)

特别的当\(N\)不含2因子时, 需要一步来产生2, 然后2才开始不断的消, 所以答案+1

Code

#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cctype>
#include <cmath>
#define rep(i,a,b) for (int i = (a); i <= (b); ++i)
using namespace std;
const int M = 1e5 + 7;
typedef long long LL; inline int ri(){
int x = 0; bool f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = 0;
for (; isdigit(c); c = getchar()) x = x*10+c-48;
return f ? x : -x;
} int tcas, n;
int prime[M], cnt;
bool notprime[M];
int f[M]; void init(){
notprime[1] = 1;
for (int i=2; i<M; ++i){
if (!notprime[i]) {
prime[++cnt] = i;
if (i == 2) f[i] = 1;
else f[i] = f[i-1];
}
for (int j=1; j<=cnt; ++j){
if (1LL * prime[j] * i >= M) break;
int t = prime[j] * i;
notprime[t] = 1;
f[t] = f[i] + f[prime[j]];
if (i % prime[j] == 0) break;
}
}
} int main(){
tcas = ri(); init(); while (tcas--){
n = ri();
LL ans = 0, havtwo = 0;
rep (i, 1, n){
int x = ri(), y = ri();
ans += 1LL * f[x] * y;
havtwo |= (x == 2);
}
if (!havtwo) ans++;
printf("%lld\n", ans);
} return 0;
}

最新文章

  1. 由用友NC刷新功能得到启示
  2. 定位form光标行
  3. OC的封装、继承与多态
  4. 初了解JS设计模式,学习笔记
  5. Android开发中的全屏背景显示方案
  6. 2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟
  7. StaticFileMiddleware中间件如何处理针对文件请求
  8. linux 屏幕录像(recordmydesktop)
  9. strut2.xml中result param详细设置
  10. Java:终结器
  11. 【linux学习笔记之一】linux系统目录结构以及常用系统命令
  12. 简单的NIO使用实例
  13. 经典问题----最小生成树(kruskal克鲁斯卡尔贪心算法)
  14. MTK 音量加减键修改为默认控制媒体音量
  15. Python之获取微信好友信息
  16. 【转】python文件和目录操作方法大全(含实例)
  17. hibernate Validator 6.X 的学习,bean的约束(主要包括的是容器元素的验证)
  18. POI2013题解
  19. 《java虚拟机》----java内存模型与线程
  20. maven ArtifactTransferException:failure

热门文章

  1. 第二篇:ssh.invoke_shell() 切换root出现的新问题
  2. Linux系统故障分析与排查--日志分析
  3. LeetCode955删列造序 ||
  4. JsRender (js模板引擎)
  5. Python虚拟机类机制之自定义class(四)
  6. datagrid的formatter
  7. System.AccessViolationException”类型的第一次机会异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
  8. WWDC2014:留给微软的时间不多了!
  9. 【3Sum Closest 】cpp
  10. IOS开发学习笔记020-练习总结