C语言题目,题干如下:
根据质因子唯一分解定理可知n=pk11pk22…pkmm,其中pi都是质数。我们定义f(n)=m, 求g(a,b)=∑bi=af(i)。
输入#
第一行是一个整数T(1≤T≤1000),表示样例的个数。
以后每个样例占一行,为两个整数 a(2≤a≤b≤106)。
输出#
依次每行输出一个样例的结果,为一个整数。
样例输入#
2
2 2
2 10
我的代码如下
#include<stdio.h>
#define N 1000007
int pr[N];
int ma[N];
void get()
{
int i,j,k,x;
pr[2] = 1;
for(x = 3;x < N;x+=2)
{
for(i = 2;i*i <=x;i++)
{
if(x%i == 0) break;
}
if(i*i > x)
{
pr[x] = 1;
}
}//标记每一个质数
for(i = 2;i < N;i++)
{
k = i;
for(j = 2;j <= i;j++)
{
if(k == 1) break;
if(pr[j])
{
if(i%j == 0)
{
ma[i]++;
while(k%j == 0) k = k/j;
}
}
}
ma[i] = ma[i-1]+ma[i];
}
}
int main(void)
{
int T;
scanf("%d",&T);
while(T--)
{
int a,b;
scanf("%d %d",&a,&b);
get();
printf("%d\n",ma[b]-ma[a-1]);
}
return 0;
}
为什么无法输出结果?