回 帖 发 新 帖 刷新版面

主题:求随机产生一个区间内整数,求其中素数的编程

求程序:
    随机产生50个10-100的整数,打印这50个数中的素数,并求出这些素数的平均值。

回复列表 (共11个回复)

沙发

下面是我本人的解法,请高手指点:
cls
n=0:s=0
option base 1
dim a(50)
print "50个随机数"
for i=1 to 50
  a(i)=int(rnd(1)*91+10) 
  print a(i);
next i
print "50个随机数中的素数"
for i=1 to 50
  flag=0
  for j=2 to a(i)-1
    if a(i) mod j=0 then flag=1
  next j
  if flag=0 then
    print a(i);
    s=s+a(i)
    n=n+1
  end if
next i
print
print "所有素数的和";s
print " 素数的个数";n
print "素数的平均值";s/n
end

板凳

正确

建议1: 当数据量巨大时,质数验证可改进.
建议2: 两个 for 可合并
建议3: 显示格式好像不太好,应该修正.

3 楼


cls
dim a(50)
for i=1 to 50
x=int(rnd*90+10)
print x;
for j=2 to x-1
if x mod j=0 then exit for
next j
if j=x then n=n+1:a(n)=x
next i
print "其中素数有:"
for i=1 to n
print a(i);
next i
end

4 楼

有一个问题不明白:比如判断一个数A是否为素数,只要判断它都不能被2-(a-1)之间的所有数整除就行了,但有的教材上却介绍判断它都不能被2-int(sqr(a))之间的所有数整除,为什么要到int(sqr(a))?依据是什么?

5 楼

奥这个问题问得好!
一个数a(例如8),如果等于两个数的积(2*4),那么这两个数,至少有一个(2)小于等于a的平方根(2.828427125),只要验证这一个就可以了,不用再去验证另外一个(4)。
这样一来,验证工作量就减少了一半!

6 楼

最快的方法是: 验证从 2 到 sqr(a) 之间的所有质数能否整除。
[quote]随机产生50个10-100的整数,打印这50个数中的素数,并求出这些素数的平均值。[/quote]

for i%=1 to 50
    a%=rnd*90+10
    for j%=2 to sqr(a%)
        if a% mod j% = 0 then exit for
    next
    if j% > sqr(a%) then
       print a%;
       k%=k%+1
       s%=s%+a%
    endif
next
print "和=";s%
print "平均数=";s%/k%

7 楼

还有一个问题要问:我记得有一题是求500以内整数的质数,那么1是不是质数呢?
    记得我上学时学的知识:1是质数的;
    现在又说1不是质数,并有证:"打开国中的数学教科书,我们可以看到质数的定义:一个大于1的整数,如果除了1和它自己之外,再也没有其它的因子,这个整数就叫做质数。"
    根据这种说法我提出的问题就得从2-500之间分析了,而排除1了;如果上面的题目改成随机产生50个0-100的整数,那就很有可能随机产生一个数1了,那就再克意的编程如果是1的话就不输出;
    1是不是质数,这个问题我还没搞清楚

8 楼

[quote]记得我上学时学的知识:1是质数的;[/quote]
建议你重新去上学.

9 楼

呵呵,现在就记得1,3,5,7,11……是质数,看来要不是记忆有问题,就是教师教错了,呵呵!
还有,以前说自然数是1,2,3,4……不包括0,而现在自然数就是0,1,2,3……包括0。随着科学发展,也要时刻注意数的变化。

10 楼

实际上,1是不是素数,是无所谓的。
在我们解决实际问题的时候,几乎没有看到过谁去考虑是不是“素数”,更何况1?
你说是不是?

我来回复

您尚未登录,请登录后再回复。点此登录或注册