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;
}

bzoj 2749 - 外星人的更多相关文章

  1. Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛

    2749: [HAOI2012]外星人 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 568  Solved: 302[Submit][Status][ ...

  2. 【BZOJ 2749】 2749: [HAOI2012]外星人 (数论-线性筛?类积性函数)

    2749: [HAOI2012]外星人 Description Input Output 输出test行,每行一个整数,表示答案. Sample Input 1 2 2 2 3 1 Sample Ou ...

  3. BZOJ 2749 HAOI 2012 外星人 数论 欧拉函数

    题意: 给出一个数,给出的形式是其分解质因数后,对应的质因数pi及其次数qi,问对这个数不停求phi,直至这个数变成1,需要多少次.(多组数据) 范围:pi <= 1e5,qi <= 1e ...

  4. 外星人(bzoj 2749)

    Description Input Output 输出test行,每行一个整数,表示答案. Sample Input 1 2 2 2 3 1 Sample Output 3 HINT Test< ...

  5. BZOJ 2749 [HAOI2012]外星人

    题解:对每一个>2的质数分解,最后统计2的个数 注意:如果一开始没有2则ans需+1,因为第一次求phi的时候并没有消耗2 WA了好几遍 #include<iostream> #in ...

  6. bzoj 2749 杂题

    我们可以发现,phi(x)与x相比,相当于x的每个质因子-1后再分解质因数,添加到现有的质因子中,比如质因子13相当于将13变成12,然后分解成2*2*3,再将2的质数+2,3的指数+1,除了质因子2 ...

  7. 【bzoj2749】[HAOI2012]外星人

    2749: [HAOI2012]外星人 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 677  Solved: 360[Submit][Status][ ...

  8. 2749: [HAOI2012]外星人

    首先像我一样把柿子画出来或者看下hint 你就会发现其实是多了个p-1这样的东东 然后除非是2他们都是偶数,而2就直接到0了 算一下2出现的次数就好 #include<cstdio> #i ...

  9. BZOJ2749: [HAOI2012]外星人

    2749: [HAOI2012]外星人 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 377  Solved: 199[Submit][Status] ...

随机推荐

  1. 第十五篇、OC_同一个View实现两个手势响应

    #pragma mark-UIGestureRecognizerDelegate Methods // 只要实现这个方法,就可以实现两个手势同时响应 - (BOOL)gestureRecognizer ...

  2. d3.js--01

    D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档.听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可 ...

  3. getchar输入多行字符,原格式输出(包含换行符)

    #include<stdio.h> int main() { FILE fp; ]; ; char ch; while((ch=getchar())!=EOF){ str[k++]=ch; ...

  4. html +css 登陆框中加用户图片,并设置登陆名不盖住图标

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【Django】Django中datetime的处理(strftime/strptime)

    strftime<将date,datetime,timezone.now()类型处理转化为字符串类型> strftime()函数是用来格式化一个日期.日期时间和时间的函数,支持date.d ...

  6. java中如何设置HTTP协议的头信息(header)

    首先,我们先看一下http的头信息到底是什么:HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他 ...

  7. win10下安装mysql-5.7.23-winx64

    Step1 官方下载地址 https://dev.mysql.com/downloads/mysql/ 选择手动下载版本 解压到自己指定的路径 上图中的my.ini及data文件夹在压缩包里是没有的, ...

  8. 4.在Cisco Packet Tracerl里路由器密码重置

    在路由器的特权模式的密码忘记的情况下,关闭路由器的电源,在接通电源,在路由器载入的时候,按ctrl+c,直接进入monitor模式 输入:confreg 0x2142 reset 重新进入后 enab ...

  9. 学习Pytbon第七天,集合

    list_1=[5,22,2,6,5,66,6,8] list_1=set(list_1)#把列表转成集合,天生不允许 重复 print(list_1,type(list_1) list_2=set( ...

  10. CDOJ:1636-梦后楼台高锁,酒醒帘幕低垂(Kruskal+暴力)

    梦后楼台高锁,酒醒帘幕低垂 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...