题目描述
根据质因子唯一分解定理可知
n=∏i=1mpkii
,其中 pi 都是素数。
定义 g(n)=∑mi=1ki , 求 ∑bi=ag(i) 。
输入
第一行是一个整数T(1≤T≤10000),表示样例的个数。 以后每行两个整数a,b(1≤a≤b≤106)
输出
每行输出一个样例的结果。
样例输入
2 1 2 1 1000000样例输出
1 3626619
解题思路:这题就和 1377 同根同源,几乎没什么变化,代码只需要改一行。
AC代码:
#include <stdio.h>
const int N = 1e6;
int vis[N+2] = {0};
int prime[80000] = {0};
void is_prime()
{
for (int i = 2; i < N; i ++) // 欧筛
{
if (!vis[i])
{
prime[++prime[0]] = i;
vis[i] = 1;
}
for (int j = 1; j <= prime[0] && i <= N/prime[j]; j ++)
{
vis[i*prime[j]] = vis[i]+1;
if (i % prime[j] == 0) break;
}
}
for (int i = 2; i <= N; i ++) // 前缀和
vis[i] += vis[i-1];
}
int main()
{
is_prime();
int T;
scanf("%d",&T);
while ( T --)
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",vis[b]-vis[a-1]);
}
return 0;
}