您的位置:首页 > 其它

Hdu 5317 RGCDQ (dp+预处理)

2016-07-10 20:06 351 查看
解析:F(x)的最大值是7,直接通过dp统计各个值的前缀和即可。

[code]:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>

using namespace std;
const int maxn = 1e6+5;

int dp[maxn][9];

int divide(int n){
int i,j,ans = 0;
for(i = 2;i*i <= n;i++){
if(n%i) continue;
ans++;
while(n%i==0){
n /= i;
}
}
if(n != 1) return ans+1;
else return ans;
}

void preprocess(){
int i,j;
dp[2][1] = 1;
for(i = 3;i <= 1000000;i++){
for(j = 1;j < 9;j++) dp[i][j] = dp[i-1][j];
dp[i][divide(i)]++;
}
}

int main(){
int i,j,cas,l,r;
//printf("%d\n",2*3*5*7*11*13*17);
preprocess();
scanf("%d",&cas);
while(cas--){
scanf("%d%d",&l,&r);
int ans = 1;
for(i = 2;i < 9;i++){
if(dp[r][i]-dp[l-1][i]>1) ans = i;
else if(dp[r][i]-dp[l-1][i]>0){
for(j = 2*i;j < 9;j+=i){
if(dp[r][j]-dp[l-1][j]>0){
ans = i;
break;
}
}
}
}
printf("%d\n",ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: