题目描述
根据质因子唯一分解定理可知n=pk11pk22…pkmm,其中pi都是质数。我们定义f(n)=m, 求g(a,b)=∑bi=af(n)。
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
以后每个样例占一行,为两个整数 a(2≤a≤b≤106)。
输出
依次每行输出一个样例的结果,为一个整数。
样例输入
2 2 2 2 10
样例输出
1 11
老规矩,先上代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<bits/stdc++.h>
using namespace std;
int ss[1000010];
void prime() {
int i, j;
for (i = 2; i <= 1000000; i++)
{
if (!ss[i])
{
for (j = i + i; j<= 1000000; j += i)
{
ss[j]++;//素数i的倍数都加1
}
ss[i]=1;
}//为求整数n是由多少个质因子相乘的,相当于是多少个质因子的倍数,
}
}
0
int main() {
prime();
int t,ans,a,b,i;
scanf("%d", &t);
while (t--) {
ans=0;
scanf("%d %d",&a,&b);
for(i=a;i<=b;i++)
{
ans+=ss[i];
}
printf("%d\n",ans);
}
return 0;
}
这题和之前的素数题没有多大区别,就是在套埃筛壳子的时候把题意的东西加进去就好,按照题意:m代表整数n由多少不同的质因子相乘,所以在筛的时候,筛到一个加上一次就好。
最后求和的时候把每一次的(a,b,)的f(i)加起来就好啦。
这篇纯纯水篇章,嘻嘻
不想复习了orz
卷不过他们