题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317
1 #include<stdio.h> 2 3 const int MAXN = 1000010; 4 int F[MAXN]; 5 bool flag[MAXN]; 6 int S[8][MAXN]; 7 8 void init(){ 9 //对数据进行初始化 10 for(int i = 2; i <= MAXN ; ++i) 11 if(!flag[i]){ 12 F[i]++; 13 for(int j = i * 2; j <= MAXN; j += i ){ 14 flag[j] = true; 15 F[j]++; 16 } 17 } 18 //进行筛选,素数F值为1,其余数看其质因数种类数 19 for(int i = 2; i <= MAXN ; ++i){ 20 for(int j = 1; j <= 7; ++j){ 21 S[j][i] = S[j][i-1] + ( F[i] == j ); 22 } 23 } 24 //由数据范围可知,F的值不超过7,通过动态规划计算每一个值在每一个位置对应的个数 25 } 26 int main() 27 { 28 int T; 29 int l, r; 30 int cnt[8]; 31 init(); 32 scanf("%d",&T); 33 while(T-->0){ 34 int ans = 1; 35 scanf("%d%d",&l,&r); 36 for( int i = 1; i <= 7; ++i){ 37 cnt[i] = S[i][r] - S[i][l-1]; 38 // printf("%d %d ",i,cnt[i]); 39 } 40 //统计个数 41 if(cnt[2]+cnt[4]+cnt[6]>=2) 42 ans = 2; 43 if(cnt[3]+cnt[6]>=2) 44 ans = 3; 45 if(cnt[4]>=2) 46 ans = 4; 47 if(cnt[5]>=2) 48 ans = 5; 49 if(cnt[6]>=2) 50 ans = 6; 51 if(cnt[7]>=2) 52 ans = 7; 53 printf("%d\n",ans); 54 } 55 56 } 57 ///总结:先分析数据范围,读清题目,简化过程 58 ///对于T较多的情况,可以先初始化
时间: 2024-10-09 15:29:25