题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317
#include<stdio.h> ; int F[MAXN]; bool flag[MAXN]; ][MAXN]; void init(){ //对数据进行初始化 ; i <= MAXN ; ++i) if(!flag[i]){ F[i]++; ; j <= MAXN; j += i ){ flag[j] = true; F[j]++; } } //进行筛选,素数F值为1,其余数看其质因数种类数 ; i <= MAXN ; ++i){ ; j <= ; ++j){ S[j][i] = S[j][i-] + ( F[i] == j ); } } //由数据范围可知,F的值不超过7,通过动态规划计算每一个值在每一个位置对应的个数 } int main() { int T; int l, r; ]; init(); scanf("%d",&T); ){ ; scanf("%d%d",&l,&r); ; i <= ; ++i){ cnt[i] = S[i][r] - S[i][l-]; // printf("%d %d ",i,cnt[i]); } //统计个数 ]+cnt[]+cnt[]>=) ans = ; ]+cnt[]>=) ans = ; ]>=) ans = ; ]>=) ans = ; ]>=) ans = ; ]>=) ans = ; printf("%d\n",ans); } } ///总结:先分析数据范围,读清题目,简化过程 ///对于T较多的情况,可以先初始化