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;
}
为什么无法输出结果?
不知道你这个问题是否已经解决, 如果还没有解决的话:/*顺序表的静态分配*/
#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数组未清零等问题,建议您仔细检查代码。