P083 求出小于或等于lim的所有素数 ★★

03-程序设计题 软件121, 唐鼎威 1634浏览

所属年份:2011.3;2011.9
编写函数int fun(int lim, int aa[MAX]),其功能是求出小于或等于lim的所有素数并放在aa数组中,并返回所求出的素数的个数。

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int fun(int lim, int aa[MAX])
{
  
}

void main()
{
  FILE *wf;
  int limit,i,sum;
  int aa[MAX];
  system("CLS");
  printf("输入一个整数:");
  scanf("%d",&limit);
  sum=fun(limit,aa);        
  for(i=0;i<sum;i++)
     {
      if(i%10==0&&i!=0)    /*每行输出10个数*/
         printf("\n ");
      printf("%5d ",aa[i]);
    }
/******************************/
  wf=fopen("out.dat","w");
  sum=fun(15,aa);        
  for(i=0;i<sum;i++)
     {
      if(i%10==0&&i!=0)    /*每行输出10个数*/
         fprintf(wf,"\n");
      fprintf(wf,"%5d ",aa[i]);
    }
  fclose(wf);
/*****************************/
}

【解题思路】
本程序使用for循环语句查找小于lim的所有数,使用内嵌的循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素数的判定方法:

       for(j=2;j<i;j++)
       if(i%j==0) break;
        …

【参考答案】

int fun(int lim, int aa[MAX])
{
    int i,j,k=0;
    for(i=2; i<=lim; i++)         /*求出小于或等于lim的全部素数*/
    {
        for(j=2; j<i; j++)
            if (i%j==0) break;
        if (j>=i)
            aa[k++]=i;            /*将求出的素数放入数组aa中*/
    }
    return k;                     /*返回所求出的素数的个数*/
}