可以看下问题出在哪里了吗?输出结果并不正确

求m位整数,(如3位整数指的是100——999之间的数)中的n个最大的素数并输出,m,n均为正整数

 
#include<stdio.h>
#include<math.h>
int main()
{
    int m,n,i=0,j=0,sum=0,t,num,a,s[100]={0};
    scanf("%d%d",&m,&n);
    for(num=pow(10,m-1);num<=pow(10,m)-1;num++)
        for(a=2;a<=sqrt(num);a++)
        {
            if(num%a==0)  break;
            if(a>sqrt(num))  s[i]=num;i++;
        }//先判断是否为素数,将素数存入数组 
    i=0;
    while(s[i]!=0)
    {
        sum++;//sum计算存到数组中的元素个数 
        i++;
    }
    for(i=0;i<sum-1;i++)
    for(j=i+1;j<sum;j++)
           if(s[i]<s[j])
           {
              t=s[i];
               s[i]=s[j];
               s[j]=t;
        }//将数组中元素从大到小排列 
    for(i=0;i<n;i++)
    {
        printf("%d\n",s[i]);
    }//输出最大的前n个数 
    return 0;
}
 


            if(a>sqrt(num))  s[i]=num;i++;

这句话你放在循环里面,我明白你是想通过证明计算到这里还没有找到因数,一定是素数,但是你需要观察一下,for循环的条件,我建议你改成a==sqrt(num),因为如果根号sum是他的因数,第一个if已经跳出去了,其次你的代码有点臃肿,后面的找出最大的n个,根本没必要排序,因为你的数组本身就是升序排列,直接从后数组后面递减n次开始for循环输出就可以

img


这个语句执行不到,因为a>sqrt(num)的时候不会进入for循环,要放在for循环下