编程论坛
注册
登录
编程论坛
→
C语言论坛
数组的应用!!
dqwybzb
发布于 2020-11-24 16:13, 1470 次点击
求大于m并且紧跟m的n个素数,并存入数组中,输出。
3 回复
#2
nosnoy
2020-11-24 17:04
我个人只想到两种方法,第一是建立素数库,判断m的值在哪,输出后N个数就行
第二是对>m的每个值进行判断其是否为素数。
前者属于一次运行,终身收益,后者随取随用,除却第一次比前者所需时间少,后面每次的运行时间都是要大些的
补充,可以考虑采取第二种方式,每一次运行都进行一次存储(排序),第二次判断m的值是否在存储的数组之间,在的话可以先提取,再判断,久而久之素数库越来越充分,自然所需时间也越来越少
[此贴子已经被作者于2020-11-24 17:08编辑过]
#3
风过无痕1989
2020-11-25 00:20
回复 楼主 dqwybzb
此题实际上就给定了求素数范围的左边界,而右边界则变相给定,程序如下:
程序代码:
#include
<stdio.h>
void
main()
{
int
m;
//
给出素数的左边界
int
n,s =
0
;
int
i, j, k =
0
;
scanf(
"
%d%d
"
, &m, &n);
int
p[n];
//
VS2015好像不支持变长数组,为此这里可设为 10000 (根据 n 值来设就行)
for
(i = m;i <
100000000
;i++)
//
不可以 m + n 作为右边界,因为其中的数不一定就是素数
{
for
(j =
2
;j <
100000000
;j++)
{
if
(i % j ==
0
)
break
;
}
if
(i == j)
{
p[s] = i;
//
求得素数,存入数组
s++;
k++;
}
if
(n == k)
break
;
}
printf(
"
\n
"
);
for
(i =
0
;i < n;i++)
//
此时数组的右边界是确定的
printf(
"
%d
"
,p[i]);
printf(
"
\n
"
);
}
#4
纯蓝之刃
2020-11-25 14:52
程序代码:
#include
<stdio.h>
#include
<math.h>
#include
<stdlib.h>
void
main()
{
unsigned
int
m,n,*p,count=
0
,j,k;
scanf(
"
%d %d
"
,&m,&n);
p=(
unsigned
int
*)malloc(n*
sizeof
(
unsigned
int
));
while
(count<n)
{
++m;
k=(
int
)sqrt(m);
for
(j=
2
;j<=k;j++)
if
(m%j==
0
)
break
;
if
(j>k)
{
*(p+count)=m;
++count;
}
}
for
(j=
0
;j<n;j++)
//
此时数组的右边界是确定的
printf(
"
%d
"
,p[j]);
printf(
"
\n
"
);
free(p);
}
1