http://172.20.6.3/Problem_Show.asp?id=1524

大概可以算一个结论吧,欧拉函数在迭代的时候,每次迭代之后消去一个2,每个非2的质因子迭代一次又(相当于)生成一个2(质因子-1变成2的倍数),所以统计总共能生成的2的个数即可。

生成的2的个数可以线性筛求出,x为质数时x中2的个数=x-1中2的个数,x不为质数时其中2的个数为其分为任意两因子后这两因子中2的个数相加(因为同一个质数拆解出2的个数不因其指数改变,所有质因数无论指数为多少其每个出现都需要拆解,质数的指数以及不同质数的个数只影响拆解速度不影响2的消去速度)。

因此f[x]=f[x-1](x为质数),f[x*y]=f[x]+f[y]。

需要注意的是,如果原数的质因子中没有2要给答案+1,因为生成的2如果在起初有2的情况下是直接删掉的,没有的2的情况下第一次计算只生成了2没有消去2,比如3->2->1迭代出1个2要两步,2*3->2->1迭代出2个2也只要2步。

代码

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
int n;
long long f[maxn]={},su[maxn]={},cnt=;
bool vis[maxn]={};
int main(){
int T;scanf("%d",&T);
f[]=;
for(int i=;i<=maxn-;i++){
if(!vis[i])su[++cnt]=i,f[i]=f[i-];
for(int j=;j<=cnt;j++){
long long z=su[j]*i;
if(z>maxn-)break;
vis[z]=;f[z]=f[su[j]]+f[i];
if(i%su[j]==)break;
}
}
while(T-->){
scanf("%d",&n);long long ans=,x,y,ff=;
for(int i=;i<=n;i++){
scanf("%I64d%I64d",&x,&y);
ans+=f[x]*y;
if(x==) ff=;
}
printf("%I64d\n",ans+ff);
}
return ;
}

JZYZOJ1524 [haoi2012]外星人 欧拉函数的更多相关文章

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

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

  2. 【BZOJ2749】【HAOI2012】外星人[欧拉函数]

    外星人 Time Limit: 3 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Input   Output 输出te ...

  3. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  4. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

  5. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  6. COGS2531. [HZOI 2016]函数的美 打表+欧拉函数

    题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...

  7. poj2478 Farey Sequence (欧拉函数)

    Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...

  8. 51Nod-1136 欧拉函数

    51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1136 1136 欧拉函数 基准时间限制:1 秒 空间限制: ...

  9. 欧拉函数 - HDU1286

    欧拉函数的作用: 有[1,2.....n]这样一个集合,f(n)=这个集合中与n互质的元素的个数.欧拉函数描述了一些列与这个f(n)有关的一些性质,如下: 1.令p为一个素数,n = p ^ k,则 ...

随机推荐

  1. 高精度模板_C++

    高精度压位,压9位 read:读入 write:输出 copy:赋值 change:交换 empty:清0 cmp:比较大小,相当于小于号 plus:加法 dec:减法 multy:乘法 除法实在不会 ...

  2. hdu 1102 Constructing Roads (最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Jav ...

  3. 9.0docker的数据管理

    dopcker容器的数据卷          为容器添加数据卷 sudo docker run -v  ~/container data:/data  -it ubuntu /bin/bash   查 ...

  4. spring项目中web-inf下不能引用页面资源

    1.spring项目结构 2.spring结构说明 web-inf目录是不对外开放的,外部没办法直接访问到(即通过url访问),只有通过映射来访问,如映射一个action或servlet通过服务器端跳 ...

  5. linux进程管理-定时定期执行任务

     0.计划任务的命令: at 安排作业在某一时刻执行 batch 安排作业在系统负载不重时执行 crontab 安排周期性运行的作业 1.at命令用法: 安排命令或者多个命令在指定的时间运行一次 语法 ...

  6. $scope作用及模块化解决全局问题

    $scope对象就是一个普通的JavaScript对象,我们可以在其上随意修改或添加属性.$scope对象在AngularJS中充当数据模型,但与传统的数据模型不一样,$scope并不负责处理和操作数 ...

  7. 比特币编译(Ubuntu 16.04)

    安装比特币需要的所有库 sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-de ...

  8. win10出现"win10系统即将过期,请激活"的处理办法

    当打开电脑时,出现"你的win10系统即将过期,请前往激活”的提示.上网查了解决方案,避免以后在出现这样的情况,现将解决步骤整理如下: 1.下载KMSpico激活软件,百度网盘下载链接如下: ...

  9. [ python ] 项目:haproxy配置文件增删改查

    1. 开发要求 实现对 haproxy.cfg 增删改查操作 2. 程序介绍 # 作者:hkey # 博客地址:https://www.cnblogs.com/hukey/p/9288279.html ...

  10. leetcode 之Plus One(9)

    这题需要注意的是最后的进位 vector<int> plusOne(vector<int>& nums,int num) { add(nums, num); } voi ...