求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循环输出就可以