本题目要求查找n~m之间所有素数,存入一维数组a中。
函数接口定义:
int fun(int n,int m,int a[]);
其中 a
为存储的素数;函数返回素数的个数。
裁判测试程序样例:
#include <stdio.h>
#define N 1000
int fun(int n,int m,int a[]);
int main()
{
int n,m,k,a[N],i;
scanf("%d%d",&n,&m);
k=fun(n,m,a);
for(i=0;i<k;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
10 100
结尾无空行
输出样例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
思路:本题是从键盘中读入两个数,然后输出这两个数之间的素数,于是我们可以做个循环对这两个数之间的数进行遍历,写出素数判断条件,将素数存入数组即可
素数判断条件:素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,如下是关于素数判断的代码
int m, n;
for(m=2; m<=50; m++)
{
for(n=2; n<m; n++)
{
if(m%n==0) //n整除m跳出当前循环
break;
}
if(m == n) //n循环结束后,如果m=n的话就输出m,若不相等,说明当前m不是素数
printf("%d ", m);
}
有了以上的知识,接下来我们就可以开始写代码了,代码如下:
int fun(int n, int m, int a[])
{
int k,t=0;//定义t变量用来统计素数个数,最后需要返回
int i, j;
if (n > m)//这一步是保证n<m,便于排序操作
{
k = n; n = m; m = k;
}
for (i = n; i <= m; i++)//这一步是素数判断
{
for (j = 2; j <= i; j++)
{
if (i % j == 0)
break;
}
if (i == j)
{
*a = i;
a++;
t++;
}
}
return t;
}