7阶乘与阶乘和数
settalkoff
"三位阶乘和数有:
"
。
form=100to999
a=int(m/100)
b=mod(int(m/10),10)
c=mod(m,10)
'
ifm=jc(a)+jc(b)+jc(c)
m
endif
endfor
~
return
funcjc
parax
p=1
*
fori=1tox
p=p*i
endfor
returnp
、
程序运行结果:
三位阶乘和数有:
145
可见145是唯一的三位阶乘和数
8综合高精度计算
《
clear
dimea(500)
a=0
"1:
计算阶乘n!
"
【
"2:
计算乘方m^n"
"3:
计算排列数A(n,m)"
input"选择(1-3):
"toz
input"请输入正整数n:
"ton
^
ifz#1
input"请输入正整数m(m<=n):
"tom
endif
d=500
;
t=1
ifz=3
t=n-m+1
endif
~
a
(1)=1
fori=tton
ifz=2
b=m
|
else
b=i
endif
f=0
*
forj=1tod
x=a(j)*b+f
f=int(x/10)
a(j)=x%10
—
endfor
endfor
j=d
dowhilea(j)=0
)
j=j-1
enddo
f=j
docase
)
casez=1
str(n,8)+"!
="
casez=2
str(m,6)+"^"+ltrim(str(n))+"="
$
casez=3
"A("+ltrim(str(n))+","+ltrim(str(m))+")="
endcase
d=0
-
forj=fto1step-1
d=d+1
str(a(j),1)
ifd%50=0
;
space(10)
endif
endfor
"所得结果共"+ltrim(str(f))+"位"
|
return
运行程序,选择3,输入n=100,m=90,得
A(100,90)=0000000000000000000
所得结果共152位。
"
10最大公约数与最小公倍数
settalkoff
input"输入正整数a:
"toa
input"输入整数b:
"tob
、
st=ltrim(str(a,12))+","+ltrim(str(b,12))
m=a*b
r=mod(a,b)
dowhiler#0
-
a=b
b=r
r=mod(a,b)
enddo
"
"("+st+")="+ltrim(str(b,15))
"("+st+")="+ltrim(str(m/b))
return
运行程序,输入1104,1272得
?
(1104,1272)=24
{1104,1272}=58512
11水仙花数
settalkoff
.
input"输入正整数a:
"toa
input"输入整数b:
"tob
st=ltrim(str(a,12))+","+ltrim(str(b,12))
m=a*b
-
r=mod(a,b)
dowhiler#0
a=b
b=r
.
r=mod(a,b)
enddo
"("+st+")="+ltrim(str(b,15))
"("+st+")="+ltrim(str(m/b))
《
return
运行程序,得水仙花数:
153370371407
12勾股数
~
settalkoff
input"请输入区间下限值:
"tom1
inpu"请输入区间上限值:
"tom2
"区间["+ltrim(str(m1))+","+ltrim(str(m2))+"]中的勾股数组有:
"
[
n=0
fora=2tosqrt(m2)
forb=1toa-1
if(a+b)%2=0
b=b+1
endif
t=0
fork=2tob
(
ifb%k=0anda%k=0
t=1
endif
endfor
!
ift=0
d=a*a-b*b
e=2*a*b
f=a*a+b*b
·
fori=1tom2/f
x=i*d
y=i*e
z=i*f
~
ifxm2
loop
endif
str(x)+str(y)+str(z)
?
n=n+1
endfor
endif
endfor
《
endfor
"共"+ltrim(str(n))+"组勾股数."
return
运行程序,求得[10,30]中的勾股数:
]
区间(10,30)中的勾股数组有:
121620
152025
182430
~
102426
212029
13完全数
settalkoff
%
input[x=]tox
input[y=]toy
"区间["+ltrim(str(x))+","+ltrim(str(y))+"]中的完全数:
"
n=0
·
fora=xtoy
s=1
fork=2toa/2
ifa%k=0
&
s=s+k
endif
endfor
ifs=a
)
n=n+1
str(n,3)+":
"+ltrim(str(a))+"-1"
fork=2toa/2
ifa/k=int(a/k)
<
"+"+ltrim(str(k,5))
endif
endfor
endif
—
endfor
return
运行程序,输入X=2,Y=100,得
区间[2,1000]中的完全数:
'
1:
6=1+2+3
2:
28=1+2+4+7+14
3:
496=1+2=4+8+16+31+62+124+248
14相亲数
[
settalkoff
fori=11to9999
s=1
t=int(sqrt(i)+.01)
:
forj=2tot
ifi%j=0
s=s+j+i/j
endif
]
endfor
ifi=t*t
s=s-t
endif
]
ifi
s1=1
t=int(sqrt(s)+
forj=2tot
`
ifs%j=0
s1=s1+j+s/j
endif
endfor
)
ifs=t*t
s1=s1-t
endif
ifs1=i
·
"相亲数:
"+str(i)+str(s)
str(i,5)+"的真因数之和为:
1"
forj=2toi/2
ifi%j=0
—
"+"+ltrim(str(j))
endif
endfor
"="+ltrim(str(s))
>
str(s,5)+"的真因数之和为:
1"
forj=2tos/2
ifs%j=0
"+"+ltrim(str(j))
·
endif
endfor
"="+ltrim(str(i))
endif
endif
endfor
return
运行程序,得4位以内的相亲数:
(
相亲数:
220284
220的真因数之和为:
1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为:
1+2+4+71+142=220
相亲数11841210
$
1184的真因数之和为:
1+2+4+8+16+32+37+74+148+296+592=1210
1210的真因数之和为:
1+2+5+10+11+22+55+110+121+242+605=1184
相亲数26202924
2620的真因数之和为:
1+2+4+5+10+20+131+262+524+655+1310=2924
¥
2924的真因数之和为:
1+2+4+17+34+43+68+86+172+731+1462=2620
相亲数50205564
5020的真因数之和为:
1+2+4+5+10+20+251+502+1004+1255+2510
=5564
、
5564的真因数之和为:
1+2+4+13+26+52+107+214+428+1391+2782
=5020
相亲数62326368
6232的真因数之和为:
1+2+4+8+19+38+41+76+82+152+164+328+779
+1558+3116=6368
6368的真因数之和为:
1+2+4+8+16+32+199+398+796+1592+3184
=6232
15守形数
>
settalkoff
input[x=]tox
input[y=]toy
fora=xtoy
'
s=a*a
b=1
k=a
dowhilek>0
。
b=b*10
k=int(k/10)
enddo
c=s%b
~
ifa=c
ltrim(str(a))+[^2=]+ltrim(str(s))
endif
endfor
~
return
运行程序,输入X=10,Y=10000得
25^2=625
76^2=5776
'
376^2=141376
625^2=390625
9376^2=
16素数
"
settalkoff
"本程序求区间[c,d]上的素数:
"
input"输入区间下限c:
"toc
input"输入区间上限d:
"tod
*
"区间["+ltrim(str(c))+","+ltrim(str(d))+"]上的素数有:
"
n=0
ifc%2=0
c=c+1
$
endif
""
fori=ctodstep2
t=0
…
forj=3tosqrt(i)step2
ifi%j=0
t=1
exit
[
endif
endfor
ift=0
str(i,6)
、
n=n+1
ifmod(n,10)=0
""
endif
"
endif
endfor
"共"+ltrim(str(n))+"个素数."
return
~
程序运行示例
本程序求区间[C,D]上的数数
输入区间下限C:
2000
输入区间上限D:
2100
"
2003201120172027202920392053206320692081
2083208720892099
共14个素数
17乌兰现象
<
settalkoff
clear
input"请输入数阵的阶数m:
"tom
dimex((m+1)*(m+1)),y((m+1)*(m+1))
{
x
(1)=0
y
(1)=0
n=1
t=int(m/2)
^
fori=1tot
n=n+1
x(n)=x(n-1)+1
y(n)=y(n-1)
(
dowhiley(n)
n=n+1
x(n)=x(n-1)
y(n)=y(n-1)+1
】
enddo
dowhilex(n)>-i
n=n+1
x(n)=x(n-1)-1
`
y(n)=y(n-1)
enddo
dowhiley(n)>-i
n=n+1
'
x(n)=x(n-1)
y(n)=y(n-1)-1
enddo
dowhilex(n)
|
n=n+1
x(n)=x(n-1)+1
y(n)=y(n-1)
enddo
(
endfor
str(m,2)+"阶数字方螺线为:
"
fork=1tom*m
r=0
;
forj=2tosqrt(k)
ifk%j=0
r=1
exit
;
endif
endfor
ifr=0andk#1
@25-y(k)*2,80+x(k)*5saystr(k,3)colorGR+/R
!
else
@25-y(k)*2,80+x(k)*5saystr(k,3)
endif
waitwindtime
;
endfor
return
运行程序,输入M=10,得10阶数字方螺线如下图:
100999897969594939291
-
65646362616059585790
66373635343332315689
67381716151413305588
68391854312295487
!
69401961211285386
70412078910275285
71422122232425265184
72434445464748495083
?
73747576777879808182
乌兰现象再现
18孪生素数
settalkoff
<
"求区间[c,d]上的孪生素数对"
input"请输入c(c>2):
"toc
input"请输入d:
"tod
f=0
)
n=0
ifc%2=0
c=c+1
endif
|
fori=ctodstep2
t=0
forj=3tosqrt(i)step2
ifi%j=0
#
t=1
exit
endif
endfor
&
ift=0
ifi-f=2
"("+ltrim(str(f))+","+ltrim(str(i))+")"
n=n+1
$
endif
f=i
endif
endfor
¥
"共"+ltrim(str(n))+"对孪生素数."
return
运行程序,输入区间[101,200],得
(101,103),(107,109),(137,139),(149,151),(179,181)
(
(191,193),(197,199)
共7对孪生素数
19梅森尼数
settalkoff
/
clear
s=0
t=2
forn=2to50
`
t=t*2
m=t-1
x=0
forj=3tosqrt(m)+1step2
~
ifm%j=0
x=1
exit
endif
:
endfor
ifx=0
s=s+1
"2^"+ltrim(str(n))+"-1="+ltrim(str(m))
endif
endfor
"指数n于[2,50]中梅森尼数共有"+ltrim(str(s))+"个."
return
】
程序运行结果与讨论
2^2-1=3
2^3-1=7
2^5-1=31
]
2^7-1=127
2^13-1=8191
2^17-1=131071
2^19-1=524287
:
2^31-1=47
指数n于[2,50]中的梅森尼数共有8个
20金蝉素数
dimea(5)
;
"金蝉素数为:
"
fork=10001to99999step2
t=0
forj=3tosqrt(k)step2
|
ifk%j=0
t=1
exit
endif
(
endfor
ift=0
a
(1)=k%10
a(5)=int(k/10000)
。
d=int(k/10)%1000
forj=2tosqrt(d)
ifd%j=0
t=1
】
exit
endif
endfor
endif
-
ift=0
a
(2)=d%10
a(4)=int(d/100)
a(3)=int(d/10)%10
]
fori=1to4
forj=i+1to5
ifa(i)=a(j)
t=1
~
exit
endif
endfor
endfor
*
endif
ift=0
forj=1to5
ifa(j)%2=0ora(3)=1ora(3)=9
!
t=1
exit
endif
endfor
$
endif
ift=0
k
endif
!
endfor
return
程序运行,得5个金蝉素数:
1359753791795319157395713
;
在输出的这5个金蝉素数中,13597与79531是互逆的金蝉素数。
21素数多项式
settalkoff
m=0
-
input"请输入f:
"tof
"y=x^2-x+"+str(f,2)+","
"当x取值在[1,"+str(f-1,2)+"],y的素数分布:
"
""
!
forx=1tof-1
y=x*x-x+f
t=0
fork=3tosqrt(y)step2
:
ify%k=0
t=1
exit
endif
|
endfor
ift=0
"x="+str(x,2)+"时,"+str(y,4)+"素数:
"
m=m+1
~
ifm%4=0
""
endif
else
·
"x="+str(x,2)+"时,"+str(y,4)
"="+str(k,3)+"*"+str(y/
endif
endfor
)
return
请输入f:
41
y=x^2+41,当n取值在[1,40],y的素数分布:
x=1时,41素数,x=2时,43素数,x=3时,47素数,
¥
x=4时,53素数,x=5时,61素数,x=6时,71素数,
x=7时,83素数,x=8时,97素数,x=9时,113素数,
x=10时,131素数,x=11时,151素数,x=12时,173素数,
x=13时,197素数,x=14时,223素数,x=15时,251素数,
`
x=16时,281素数,x=17时,313素数,x=18时,347素数,
x=19时,383素数,x=20时,421素数,x=21时,461素数,
x=22时,503素数,x=23时,547素数,x=24时,593素数,
x=25时,641素数,x=26时,691素数,x=27时,743素数,
》
x=28时,797素数,x=29时,853素数,x=30时,911素数,
x=31时,971素数,x=32时,1033素数,x=33时,1097素数,
x=34时,1163素数,x=35时,1231素数,x=36时,1301素数,
x=37时,1373素数,x=38时,1447素数,x=39时,1523素数,
,
x=40时,1601素数,
验证了当x=1,2,,,,40时,二次多项式x^2-x+41的值均为素数
22等差素数列
"求指定区间内等差素数列的最多项数:
"
;
input"请输入区间下限w0:
"tow0
input"请输入区间上限w:
"tow
dimea((w-w0)/2)
u=0
(
ifw0%2=0
w0=w0+1
endif
fork=w0towstep2
>
t=0
forj=3tosqrt(k)step2
ifk%j=0
t=1
|
exit
endif
endfor
ift=0
(
u=u+1
a(u)=k
endif
endfor
】
max=0
forn=1tou-1
p=a(u)-a(n)
forj=n+1tou
?
d=a(j)-a(n)
ifd>p/3
exit
endif
}
h=j
m1=2
fori=j+1tou
ifa(i)-a(h)=d
…
h=i
m1=m1+1
endif
ifmax'
max=m1
m=a(n)
d1=d
endif
\
endfor
endfor
endfor
"区间["+ltrim(str(w0))+","+ltrim(str(w))+"]"
{
"内等差素数列最多有"+ltrim(str(max))+"项>"
""
fori=1tomax
ltrim(str(m+(i-1)*d1))+""
;
endfor
return
程序运行示例:
请输入区间下限w0:
3
>
请输入区限上限w:
2009
区间[3,2009]内等差素数列最多有9项:
19940961982910391249145916691879
请输入区间下限w0:
101
}
请输入区限上限w:
1000
区间[3,2009]内等差素数列最多有6项:
107137167197227257
23验证歌德巴赫想
@
settalkoff
"在区间[c,d]中验证哥德巴赫猜想:
"
input"请输入区间下限c="toc
input"请输入区间上限d="tod
(
ifc%2#0
c=