主题:求随机产生一个区间内整数,求其中素数的编程
蓝色的水晶
[专家分:90] 发布于 2006-11-09 09:16:00
求程序:
随机产生50个10-100的整数,打印这50个数中的素数,并求出这些素数的平均值。
回复列表 (共11个回复)
沙发
蓝色的水晶 [专家分:90] 发布于 2006-11-09 11:02:00
下面是我本人的解法,请高手指点:
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
板凳
moz [专家分:37620] 发布于 2006-11-09 11:25:00
正确
建议1: 当数据量巨大时,质数验证可改进.
建议2: 两个 for 可合并
建议3: 显示格式好像不太好,应该修正.
3 楼
风吹过 [专家分:30] 发布于 2006-11-12 06:46:00
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 楼
蓝色的水晶 [专家分:90] 发布于 2006-11-12 17:55:00
有一个问题不明白:比如判断一个数A是否为素数,只要判断它都不能被2-(a-1)之间的所有数整除就行了,但有的教材上却介绍判断它都不能被2-int(sqr(a))之间的所有数整除,为什么要到int(sqr(a))?依据是什么?
5 楼
老大徒伤悲 [专家分:29120] 发布于 2006-11-12 18:57:00
奥这个问题问得好!
一个数a(例如8),如果等于两个数的积(2*4),那么这两个数,至少有一个(2)小于等于a的平方根(2.828427125),只要验证这一个就可以了,不用再去验证另外一个(4)。
这样一来,验证工作量就减少了一半!
6 楼
moz [专家分:37620] 发布于 2006-11-12 21:57:00
最快的方法是: 验证从 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 楼
蓝色的水晶 [专家分:90] 发布于 2006-11-15 08:36:00
还有一个问题要问:我记得有一题是求500以内整数的质数,那么1是不是质数呢?
记得我上学时学的知识:1是质数的;
现在又说1不是质数,并有证:"打开国中的数学教科书,我们可以看到质数的定义:一个大于1的整数,如果除了1和它自己之外,再也没有其它的因子,这个整数就叫做质数。"
根据这种说法我提出的问题就得从2-500之间分析了,而排除1了;如果上面的题目改成随机产生50个0-100的整数,那就很有可能随机产生一个数1了,那就再克意的编程如果是1的话就不输出;
1是不是质数,这个问题我还没搞清楚
8 楼
moz [专家分:37620] 发布于 2006-11-15 10:24:00
[quote]记得我上学时学的知识:1是质数的;[/quote]
建议你重新去上学.
9 楼
蓝色的水晶 [专家分:90] 发布于 2006-11-15 17:55:00
呵呵,现在就记得1,3,5,7,11……是质数,看来要不是记忆有问题,就是教师教错了,呵呵!
还有,以前说自然数是1,2,3,4……不包括0,而现在自然数就是0,1,2,3……包括0。随着科学发展,也要时刻注意数的变化。
10 楼
老大徒伤悲 [专家分:29120] 发布于 2006-11-15 19:38:00
实际上,1是不是素数,是无所谓的。
在我们解决实际问题的时候,几乎没有看到过谁去考虑是不是“素数”,更何况1?
你说是不是?
我来回复