C语言前缀和为什么输不出答案

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
#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;
}

为什么无法输出结果?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7774938
  • 你也可以参考下这篇文章:棋盘覆盖超详细解析+代码实现-分治法解决
  • 除此之外, 这篇博客: 【顺序表实现方式】静态分配与动态分配中的 静态分配完整代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    /*顺序表的静态分配*/
    #include <stdio.h>
    #define MaxSize 10		//定义最大长度
    typedef struct
    {
    	int data[MaxSize];	//用静态的“数组”存放数据元素
    	int length;			//顺序表的当前长度
    }SqList;				//顺序表的类型定义,SqList:Sequence List(顺序表)
    
    //初始化一个顺序表
    void InitList(SqList &L)
    {
    	for(int i=0; i<MaxSize;i++)
    		L.data[i]=0;	//将所有数据元素设置为默认初始值0
    	L.length=0;			//顺序表初始长度为0
    }
    
    int main()
    {
    	SqList L;			//声明一个顺序表
    	InitList(L);		//初始化顺序表
    	for(int i=0;i<MaxSize;i++)
    		printf("data[%d]=%d\n",i,L.data[i]); 
        return 0;
    }

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

参考GPT和自己的思路:

您的代码中在主函数中调用了get()函数,而get()函数中实现的是预处理函数,在调用一次即可,多次调用会出错,导致无法输出结果。可以将get()函数放在主函数前面,只调用一次即可在主函数里多次使用。同时,还需要注意一些隐含的问题,如a和b的范围问题,ma数组未清零等问题,建议您仔细检查代码。