2749: [HAOI2012]外星人

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 677  Solved: 360
[Submit][Status][Discuss]

Description

Input

Output

输出test行,每行一个整数,表示答案。

Sample Input

1
2
2 2
3 1

Sample Output

3
 
 
 
【题解】
 
注意到只有phi[2]=1,所以每个数最终都是要经过phi[2]=1这一步变为1
 
而每一次做欧拉函数,从这个式子可以看出:会产生一个2,也必会消掉一个2
 
因此我们只需要算出原数N的质因子一共会产生多少个2即可
 
于是我们令f[i]表示i分解出了几个2:这一过程类似素数筛法
 
i为质数,f[i] = f[i - 1];否则,f[i * prime[j] = f[i] + f[prime[j]]  (<--这就是传说中的纯O(n)线性筛)
 
另:如果一开始n为奇数,则ans需+ 1,因为变出2需要第一步。
 
  1. /*************
  2. bzoj 2749
  3. by chty
  4. 2016.11.4
  5. *************/
  6. #include<iostream>
  7. #include<cstdio>
  8. #include<cstdlib>
  9. #include<cstring>
  10. #include<ctime>
  11. #include<cmath>
  12. #include<algorithm>
  13. using namespace std;
  14. #define MAXN 100000
  15. typedef long long ll;
  16. ll T,n,cnt,check[MAXN+],prime[MAXN+],f[MAXN+];
  17. inline ll read()
  18. {
  19. ll x=,f=; char ch=getchar();
  20. while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
  21. while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
  22. return x*f;
  23. }
  24. void pre()
  25. {
  26. f[]=;
  27. for(ll i=;i<=MAXN;i++)
  28. {
  29. if(!check[i]) {prime[++cnt]=i; f[i]=f[i-];}
  30. for(ll j=;j<=cnt&&prime[j]*i<=MAXN;j++)
  31. {
  32. check[prime[j]*i]=;
  33. f[prime[j]*i]=f[prime[j]]+f[i];
  34. if(i%prime[j]==) break;
  35. }
  36. }
  37. }
  38. int main()
  39. {
  40. freopen("cin.in","r",stdin);
  41. freopen("cout.out","w",stdout);
  42. T=read(); pre();
  43. while(T--)
  44. {
  45. n=read(); ll ans();
  46. for(ll i=;i<=n;i++)
  47. {
  48. ll p=read(),q=read();
  49. if(p==) ans--;
  50. ans+=f[p]*q;
  51. }
  52. printf("%lld\n",ans);
  53. }
  54. return ;
  55. }
 

【bzoj2749】[HAOI2012]外星人的更多相关文章

  1. BZOJ2749: [HAOI2012]外星人

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

  2. BZOJ2749 HAOI2012外星人(数论)

    不妨把求φ抽象成把将每个位置上的一个小球左移一格并分裂的过程,那么即求所有球都被移到1号格子的步数. 显然要达到1必须先到达2.可以发现每次分裂一定会分裂出2号位的球,因为2以外的质数一定是奇数.以及 ...

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

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

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

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

  5. [HAOI2012]外星人

    题目大意: 告诉你一个数n,求满足φ^x(n)=1的x. 思路: 首先我们可以发现满足φ(n)=1的数只有2,也就是说你得到最终的结果,最后一步肯定是φ(2). 同时,可以发现φ(φ(2^k))=φ( ...

  6. JZYZOJ1524 [haoi2012]外星人 欧拉函数

    http://172.20.6.3/Problem_Show.asp?id=1524 大概可以算一个结论吧,欧拉函数在迭代的时候,每次迭代之后消去一个2,每个非2的质因子迭代一次又(相当于)生成一个2 ...

  7. 题解 P2350 【[HAOI2012]外星人】

    题目链接 还是本宝宝写题解的一贯习惯 $ :$ 先吐槽吐槽这道题$……$ 相信不少同学第一眼一定没有看懂题.(因为我也没看懂) ~~初中~~数学知识: 对于函数 $ f(x)$ 有 $f^{-1}(x ...

  8. 2749: [HAOI2012]外星人

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

  9. BZOJ 2749 [HAOI2012]外星人

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

随机推荐

  1. markdown 语法汇总

    Markdown是什么? Markdown是一种轻量级标记语言,它以纯文本形式(_易读.易写.易更改_)编写文档,并最终以HTML格式发布. Markdown也可以理解为将以MARKDOWN语言编写的 ...

  2. SSH框架(2)

    个人分类: Java面试   Struts 谈谈你对Struts的理解. 答: 1.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为Acti ...

  3. Switch能否使用String做参数

    在Java语言中Swith可以使用参数类型有:Only convertible int values, strings or enum variables are permitted 可以自动转换为整 ...

  4. 在IIS站点中使用数字证书

    1. SSL解析(内容来自百度百科) SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安 ...

  5. 【转载】对一致性Hash算法,Java代码实现的深入研究

    原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...

  6. thinkphp的select和find的区别(转)

    做普通PHP项目转thinkphp时,字段自动完整匹配,ajax时前台数据一直取不到,后发现是select和find返回数据集有差异,参考下面方法修改. $this->ajaxReturn($m ...

  7. delphi 线程的使用

    unit untWorkThread; interface uses Windows,Classes,SysUtils; type TWorkItem=class end; TProcessWork= ...

  8. Linux安装JRE tomcat配置java环境

    安装JRE 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JRE软件. 1.wget http://down ...

  9. Redis数据清除问题

    Redis中数据清除可以分为两种方式 手动清除:指定要清除的key,通过delete命令即可清除 自动清除:使用Redis提供的数据过期策略 Redis数据过期策略      redis提供了非常灵活 ...

  10. Mac电脑Tomcat下载及安装(详细)

    下载Tomcat 1.打开Apache Tomcat官网,选择你需要的版本进行下载: 地址http://tomcat.apache.org/download-70.cgi   2.解压apache-t ...