hdu 5297 Y sequence(容斥)
2015-07-31 22:15
267 查看
题目链接:hdu 5297 Y sequence
考虑62以内的指数,x为奇数个质数因子,就减掉,偶数个加上。计算x为指数的不满足数直接pow(n,1/x)即可。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int fac[30] = {-2, -3, -5, -7, -11, -13, -17, -19, -23, -29, -31, -37, -41, -43, -47, -53, -59, -61, -67};
ll N;
int R;
vector<int> S;
void init () {
S.clear();
scanf("%lld%d", &N, &R);
for (int i = 0; abs(fac[i]) <= R; i++) {
int tmp = S.size();
for (int j = 0; j < tmp; j++) {
if (abs(fac[i] * S[j]) <= 63)
S.push_back(fac[i] * S[j]);
}
S.push_back(fac[i]);
}
}
ll get(ll n) {
if (n == 1)
return 0;
ll ret = n;
for (int i = 0; i < S.size(); i++) {
ll tmp = (ll)(pow(n + 0.5, 1.0 / abs(S[i]))) - 1;
if (S[i] < 0)
ret -= tmp;
else
ret += tmp;
}
return ret - 1;
}
void solve () {
ll ret = N;
while (true) {
ll tmp = get(ret);
if (tmp == N)
break;
ret += N - tmp;
}
printf("%lld\n", ret);
}
int main () {
int cas;
scanf("%d", &cas);
for (int i = 1; i <= cas; i++) {
init();
solve();
}
return 0;
}
考虑62以内的指数,x为奇数个质数因子,就减掉,偶数个加上。计算x为指数的不满足数直接pow(n,1/x)即可。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int fac[30] = {-2, -3, -5, -7, -11, -13, -17, -19, -23, -29, -31, -37, -41, -43, -47, -53, -59, -61, -67};
ll N;
int R;
vector<int> S;
void init () {
S.clear();
scanf("%lld%d", &N, &R);
for (int i = 0; abs(fac[i]) <= R; i++) {
int tmp = S.size();
for (int j = 0; j < tmp; j++) {
if (abs(fac[i] * S[j]) <= 63)
S.push_back(fac[i] * S[j]);
}
S.push_back(fac[i]);
}
}
ll get(ll n) {
if (n == 1)
return 0;
ll ret = n;
for (int i = 0; i < S.size(); i++) {
ll tmp = (ll)(pow(n + 0.5, 1.0 / abs(S[i]))) - 1;
if (S[i] < 0)
ret -= tmp;
else
ret += tmp;
}
return ret - 1;
}
void solve () {
ll ret = N;
while (true) {
ll tmp = get(ret);
if (tmp == N)
break;
ret += N - tmp;
}
printf("%lld\n", ret);
}
int main () {
int cas;
scanf("%d", &cas);
for (int i = 1; i <= cas; i++) {
init();
solve();
}
return 0;
}
相关文章推荐
- 黑马程序员------API(String类,StringBuffer,StringBuilder及基本数据类型包装类)
- Entityframework~Fluent Api配置数据模型与数据库结构关系
- mysql启动错误:Starting MySQL.. ERROR! The server quit without updating PID file错误
- 递归和循环---从EasyUI Tree 发现自己的硬伤
- uva11235 Frequent values(线段树区间合并)
- LTView 自定义视图 UIAlertView
- EasyUi 新组件 switchbutton 根据状态切换显示内容
- Android API Guides 阅读笔记(9)----Bound Service
- UVA1152-4 Values whose Sum is 0
- UIViewController(视图控制器)下的View切换
- UVA1605-Building for UN
- 仿Uber主界面布局,框架简单实现
- iOS-01-UILabel
- PcDuino初学分享
- BlockingQueue中add,offer,put方法区别
- cmsis-rtos v1.02支持Mail Queue问题
- [UVA11572]Unique Snowflakes[构造]
- UIScrollView的属性总结
- hdu 2767 Proving Equivalences
- AndroidUI设计之 布局管理器 - 详细解析布局实现