【HAOI2012】外星人
又犯sb错了QAQ
原题:
艾莉欧在她的被子上发现了一个数字 ,她觉得只要找出最小的x使得,。
根据这个 她就能找到曾经绑架她的外星人的线索了。当然,她是不会去算,请你帮助她算出最小的x。
test<=50;pi<=10^5; 1<=qi<=10^9
恩看到phi一般都是要用到phi的积性的
根据样例解释可以看出来这个就是求连续求phi多少次能求出1
phi(a*b)=phi(a)*phi(b)
phi(phi(a*b))=phi(phi(a)*phi(b))=phi(phi(a))*phi(phi(b))
题目直接给的是质因子分解的形式,所以可以用f[i]表示i要phi几次变成1
显然如果f[prime_number]=f[prime_number-1],f[prime_number*i]=f[prime_number]+f[i]
筛phi的时候搞一搞就行了
需要注意如果输入的数是奇数(即没有因子2)答案要+1
至于为什么……易证,请同学们自行推到(逃
这题又看题解了,然后又写了一个sb_bug,老是看题解+sb_bug,怎么办嘛QAQ
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
int n;
int f[];
bool flg[];
int phi[],prm[],tt=;
void gtphi(){
n=;
memset(flg,,sizeof(flg));
phi[]=f[]=;
for(int i=;i<=n;++i){
if(!flg[i]){ phi[i]=i-,f[i]=f[i-]; prm[++tt]=i;}
for(int j=;j<=tt && i*prm[j]<=n;++j){
flg[i*prm[j]]=true;
f[i*prm[j]]=f[i]+f[prm[j]];
if(!(i%prm[j])){ phi[i*prm[j]]=phi[i]*prm[j]; break;}
phi[i*prm[j]]=phi[i]*phi[prm[j]];
}
}
}
int main(){//freopen("ddd.in","r",stdin);
gtphi();
int T; cin>>T; while(T--){
cin>>n;
int l,r; ll bwl=; bool flg=;
while(n--){
l=rd(),r=rd();
bwl+=(ll)f[l]*r;
if(l==) flg=;
}
printf("%I64d\n",bwl+flg);
}
return ;
}
【HAOI2012】外星人的更多相关文章
- Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛
2749: [HAOI2012]外星人 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 568 Solved: 302[Submit][Status][ ...
- BZOJ2749: [HAOI2012]外星人
2749: [HAOI2012]外星人 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 377 Solved: 199[Submit][Status] ...
- 【BZOJ 2749】 2749: [HAOI2012]外星人 (数论-线性筛?类积性函数)
2749: [HAOI2012]外星人 Description Input Output 输出test行,每行一个整数,表示答案. Sample Input 1 2 2 2 3 1 Sample Ou ...
- 【bzoj2749】[HAOI2012]外星人
2749: [HAOI2012]外星人 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 677 Solved: 360[Submit][Status][ ...
- BZOJ2749 HAOI2012外星人(数论)
不妨把求φ抽象成把将每个位置上的一个小球左移一格并分裂的过程,那么即求所有球都被移到1号格子的步数. 显然要达到1必须先到达2.可以发现每次分裂一定会分裂出2号位的球,因为2以外的质数一定是奇数.以及 ...
- [HAOI2012]外星人
题目大意: 告诉你一个数n,求满足φ^x(n)=1的x. 思路: 首先我们可以发现满足φ(n)=1的数只有2,也就是说你得到最终的结果,最后一步肯定是φ(2). 同时,可以发现φ(φ(2^k))=φ( ...
- JZYZOJ1524 [haoi2012]外星人 欧拉函数
http://172.20.6.3/Problem_Show.asp?id=1524 大概可以算一个结论吧,欧拉函数在迭代的时候,每次迭代之后消去一个2,每个非2的质因子迭代一次又(相当于)生成一个2 ...
- 题解 P2350 【[HAOI2012]外星人】
题目链接 还是本宝宝写题解的一贯习惯 $ :$ 先吐槽吐槽这道题$……$ 相信不少同学第一眼一定没有看懂题.(因为我也没看懂) ~~初中~~数学知识: 对于函数 $ f(x)$ 有 $f^{-1}(x ...
- 2749: [HAOI2012]外星人
首先像我一样把柿子画出来或者看下hint 你就会发现其实是多了个p-1这样的东东 然后除非是2他们都是偶数,而2就直接到0了 算一下2出现的次数就好 #include<cstdio> #i ...
- BZOJ 2749 [HAOI2012]外星人
题解:对每一个>2的质数分解,最后统计2的个数 注意:如果一开始没有2则ans需+1,因为第一次求phi的时候并没有消耗2 WA了好几遍 #include<iostream> #in ...
随机推荐
- Java反射《二》获取构造器
package com.study.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Invocation ...
- [HDU4585]Shaolin
Problem 问你一个数的前驱和后继 Solution Treap模板题 Notice 注意输出那个人的编号 Code #include<cmath> #include<cstdi ...
- mq(1):简介
1.mq的使用场景 以前的我,一直都没太搞明白,为什么我们那么需要消息队列,直到我看到了网友scienjus.的这个例子. 例子:假设用户在你的软件中注册,服务端收到用户的注册请求后,它会做这些操作: ...
- python中各种遇到的函数
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
- Cracking The Coding Interview 3.5
//Implement a MyQueue class which implements a queue using two stacks. #include <iostream> #in ...
- Linux学习 :移植U-boot_2012.04.01到JZ2440开发板
一.下载U-boot源码:ftp://ftp.denx.de/pub/u-boot/ 二.uboot的启动过程: 部分硬件初始化——>加载完整uboot到RAM——>跳转到第二阶段入口开始 ...
- 3.8 C++继承机制下的析构函数
参考:http://www.weixueyuan.net/view/6365.html 总结: 构造函数的执行顺序是按照继承顺序自顶向下的,从基类到派生类,而析构函数的执行顺序是按照继承顺序自下向上, ...
- git创建版本库 小白操作 (看图)
1.什么都没记住,各种试 pwd --查看当前路径 cd /e --进入E盘 mkdir test --在E盘下创建test空文件夹 git init -- 初始化,编程git可以管理的 ...
- Getting started with 3G | ip.access nano3G+OpenBSC+Osmocom-bb Part 1
English Version could be find at Osmocom.org https://osmocom.org/projects/cellular-infrastructure/wi ...
- Vue.js 2.0生命周期
1.beforeCreate 组建实例刚被创建,属性和方法等都还没有 2.created 实例已经创建完成,属性已经绑定 3.beforeMount 模板编译之前 4.mounted ...