2015CCPC湖南J题
2016-04-08 00:18
330 查看
题意:问1[,n]区间中,有多少个数,它的2,3,5,7,11,13的这几个因子数目之和为偶数。
预处理出所有的基数x,满足x只含有2,3,5,7,11,3这几个质因子,且数目为偶数。
即: 1 (0个的特殊处理)
2*2 , 2*3 , 2 *4 ,...2*13 , 3*3,
13*13*13*.....
基数x的数目为:13684个
对于一个数n,枚举所有的基数x,对于一个基数x,
f(n/x)即求出[1,n/x]中不含有2,3,5,7,11,13作为因子的数有多少个,
f(n/x) = f(m) = m - m/2- m/3-....+m/2*3+....
预处理出所有的基数x,满足x只含有2,3,5,7,11,3这几个质因子,且数目为偶数。
即: 1 (0个的特殊处理)
2*2 , 2*3 , 2 *4 ,...2*13 , 3*3,
13*13*13*.....
基数x的数目为:13684个
对于一个数n,枚举所有的基数x,对于一个基数x,
f(n/x)即求出[1,n/x]中不含有2,3,5,7,11,13作为因子的数有多少个,
f(n/x) = f(m) = m - m/2- m/3-....+m/2*3+....
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; typedef long long LL; const int N = 1000000000 ; int prime[6] = {2,3,5,7,11,13} ; int bases[13687] ; //13684个基数 int baseSize ; void dfsPreInit(LL nowNumber , int position , int Size){ if(position == 6){ if(Size % 2 == 0) bases[baseSize++] = nowNumber ; return ; } while(nowNumber <= N){ dfsPreInit(nowNumber , position+1 , Size) ; nowNumber *= prime[position] ; Size ++ ; } } int calcu(int m){ int res = m ; int limit = (1<<6) -1 ; for(int i = 1 ; i <= limit ; i++){ int Size = 0 ; int t = 1L ; for(int j = 0 ; j < 6 ; j++){ if((i&(1<<j)) > 0){ Size++ ; t *= prime[j] ; } } if((Size&1) > 0) res -= m / t ; else res += m / t ; } return res ; } int main(){ baseSize = 0 ; dfsPreInit(1, 0 , 0); std::sort(bases , bases + baseSize) ; int t ; int sum , n ; scanf("%d" , &t) ; while(t--){ scanf("%d" , &n) ; sum = 0L ; for(int i = 0 ; i < baseSize && bases[i] <= n ; i++){ sum += calcu(n / bases[i]) ; } printf("%d\n" , sum) ; } return 0 ; }
相关文章推荐
- hihocoder #1285 智力竞赛
- Poj 2528-Mayor's posters 线段切割
- 学习 git基础命令
- LVS+Keepalived
- 栈的数组实现
- Java开发者值得关注的7款新工具
- C#获取Session、设置Session类文件
- Android大图片裁剪终极解决方案 原理分析
- 模取幂运算 计算a^b mod n
- 写固定文件大小的日志文件
- Android,IntentService
- example_PDO操作数据库简便方法
- 5个强大的Java分布式缓存框架推荐
- React-Native系列Android——Touch事件原理及状态效果
- 关于C语言的问卷调查!!!!!!!!!!
- HDU 1547 Bubble Shooter(BFS蔓延模拟)
- 当年折在此~~
- SHELL脚本学习笔记_2016_04
- Fox And Two Dots
- Unity中Time.deltaTime的使用