HDU 5297
2016-03-14 10:53
169 查看
用x ^ (1 / n) 来求个数,容斥原理 , Num会向后移动, 迭代到不再变化,退出循环
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; const int Primes[] = {-2,-3,-5,-7,-11,-13,-17,-19,-23,-29,-31,-37,-41,-43,-47,-53,-59,-61,-67,-71}; vector<int> R_number; void GetR(LL R) { R_number.clear(); for(int i = 0; abs(Primes[i])<= R; ++i) { int tmp = Primes[i]; int Num = R_number.size(); for(int j = 0; j < Num; ++j) { if(abs(R_number[j]*tmp) <= 63) R_number.push_back(tmp * R_number[j]); } R_number.push_back(Primes[i]); } } LL Cnt(LL N) { //GetR(R); if(N == 1) return 0; LL cnt = N; for(int i = 0; i < R_number.size(); ++i) { LL tmp = LL (pow(N+0.5, 1.0/abs(R_number[i])) - 1); if(R_number[i] < 0) cnt -= tmp; else cnt += tmp; } return cnt - 1; } void Solve(LL N,LL R) { GetR(R); LL ans = N; while(1) { LL tmp = Cnt(ans); if(tmp == N) break; ans += N - tmp; } printf("%lld\n",ans); } int main() { int t; scanf("%d",&t); while(t--) { LL n,r; scanf("%I64d %I64d",&n,&r); Solve(n,r); } return 0; }
相关文章推荐
- HDU 5288 OO’s Sequence
- HNUOJ 13341
- WebRTC Android API
- Find Lines
- Java代码优化--尽可能地使用stack(栈)变量(方法内部的局部变量)
- lightoj 1017 Brush (III) 基础DP
- Java中static关键字详述
- Fragment的使用(四)
- 【转】MyBatis学习总结(七)——Mybatis缓存
- python threading
- ceph 自动化自动化安装
- 你知道 Linux 内核是如何构建的吗?
- java中volatile关键字的含义
- 线程池学习总结---原理及实现
- zabbix磁盘IO监控
- swift - singleton
- Deformity JSP Webshell、Webshell Hidden Learning
- freefilesync 7 使用
- SQL Server 之 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误
- android轻量级开源缓存框架——ASimpleCache(ACache)源码分析