为辅导儿子小学信息学奥赛用
小学信息奥赛练习题集 1
——FreeBasic 版
XXX
2011 年
第二章 素数类问题
2-1.判断一个数是素数的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
如果一个数只能被 1和它自己整除,则该数为素数,因此判素数的方法就是:如果概数
为 N,则将该数分别除以 2,3,4……, N-1,如果所有的数都除不尽,则 N是素数,否则 N
是合数。进一步研究我们发现,可以将该数分别除以 2,3,4,……,N/2。这样可以少做
一半的除法,就能得到结果。更进一步的研究,其实只要除以 2,3,4,……, SQR(N)就
可以了,这可大大加快程序的执行速度。
DIM a,n,f,i as integer
input n
a=sqr(n)
f=1
for i=2 to a
if n mod i =0 then f = 0
next i
if(f=1) then
? "yes"
else
? "no"
endif
sleep
end
2-2.打印从 1到 N之间的所有素数
DIM a,n,f,i,k as integer
input n
for k=2 to n
a=sqr(k)
f=1
for i=2 to a
if k mod i =0 then f = 0
next i
if(f=1) then ? k,
next k
sleep
end
2-3. 每一个素数的倒数都可以化为一个循环小数,例如:1/7 可以化为 0.
(142857),1/13 可化为 0.(076923)。编程把 17 的倒数化为循环小数。(★
★)(暂不做)
DIM AS INTEGER A,B,C,I,J,K,YES,Q
DIM E(200) AS INTEGER
A=1
B=17
FOR I=1 TO 200
C=A*10\B
A=(A*10) MOD B
E(I)=C
NEXT I
Q=0
FOR I=1 TO 200
FOR J=I+1 TO 200
IF(E(I)=E(J)) THEN
YES=1
FOR K=1 TO J-I
IF(E(I)<>E(J)) THEN YES=0
NEXT K
IF(YES=1) THEN
FOR K=I TO J-1
? E(K);
NEXT K
Q=1
ENDIF
ENDIF
IF(Q=1) THEN EXIT FOR
NEXT J
IF(Q=1) THEN EXIT FOR
NEXT I
SLEEP
END
2-4编程求正整数 M与 N(M
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示。例如:4=2+2,6=3+3,8=3+5,98=17+79。(★★,循环语
句) (学会用 FUNCTION 来判断素数)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,F,J
F=0
DO
INPUT "INPUT N ",N
IF(N MOD 2 =0) AND (N>4) THEN
F=1
ELSE ? "ERROR, N MUST BE EVEN AND BIGER THAN 4"
ENDIF
LOOP UNTIL F=1
FOR J=2 TO N/2
IF((PRIME(J)=1) AND (PRIME(N-J)=1)) THEN ? N;"=";J;"+";n-j
NEXT J
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-6 歌德巴赫猜想之一是任何大于 5 的奇数都可表示为 3个素数之和。请用 10
个大于 5 的奇数验证这一论断。奇数用随机
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数产生,把验证编写为过程,打
印出每个数和组成该数的三个素数。(★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,F,J,K,L
RANDOMIZE TIMER
FOR L=1 TO 10
F=0
DO
N=INT(RND*95)+5
LOOP UNTIL ((N MOD 2 =1) AND (N>5))
FOR J=2 TO N/3
FOR K=2 TO N/3
IF((PRIME(J)=1) AND (PRIME(K)=1) AND (PRIME(N-J-K)=1)) THEN
? N;"=";J;"+";K;"+";n-j-K
F=1
ENDIF
IF F=1 THEN EXIT FOR
NEXT K
IF F=1 THEN EXIT FOR
NEXT J
NEXT L
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-7一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对
素数,例如 13。试找出所有两位数的绝对素数。
DECLARE PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,F,J
FOR J=11 TO 99
IF(PRIME(J)=1) THEN
F=(J MOD 10)*10+J\10
IF(PRIME(F)=1) THEN ? J,
ENDIF
NEXT J
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-8用筛选法求 2-100之间的素数。(可暂不做,能做最好,需解释)(★★★)
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
:由希腊著名数学家埃拉托色尼提出的所谓“筛法”,步骤如下:
①将所有候选数放入筛中;
②找筛中最小数(必为素数)next,放入集合 primes中;
③将 next的所有倍数从筛中筛去;
④重复②~④直到筛空。
DECLARE FUNCTION PRIME(X AS INTEGER)
DIM AS INTEGER N,F,I,J,A(100)
FOR I=2 TO 100
A(I)=1
NEXT I
FOR I=2 TO 100
IF(A(I)=1) THEN
?I,
J=I+I
WHILE J<=100
A(J)=0
J=J+I
WEND
ENDIF
NEXT I
SLEEP
END
2-9若两素数之差为 2,则称该两素数为双胞胎数。求出[2,300]之内:(1)
最大的一对双胞胎数;(2)有多少对双胞胎数。(★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,A,J
N=0
A=0
FOR J=2 TO 298
IF((PRIME(J)=1) AND (PRIME(J+2)=1)) THEN
N=N+1
A=J
ENDIF
NEXT J
? A,A+2,N
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-10 若两个自然连续数乘积减 1 后是素数,则称此两个自然连续数为友数对,
该素数称为友素数。例如,由于 2×3-1=5,因此,2 与 3 是友数对,5 是友
素数。求[2,99]之间:(1)友数对的数目;(2)所有友素数之和。(★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,J
N=0
M=0
A=0
FOR J=2 TO 98
A=J*(J+1)-1
IF(PRIME(A)=1) THEN
N=N+1
M=M+A
ENDIF
NEXT J
? N,M
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-11 梅森尼数是指能使 2n-1 为素数的数 n。求[1,21]范围内:(1)有多少
个梅森尼数?(2)最大的梅森尼数? (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,J
N=0
M=0
A=0
FOR J=1 TO 21
A=2^j-1
IF(PRIME(A)=1) THEN
N=N+1
M=j
ENDIF
NEXT J
? N,M
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-12 一个素数(设为 p)依次从低位去掉一位,二位,…,若所得的各数仍都
是素数,则称数 p 为超级素数。例如 239 即是超级素数。试求[100,9999]
之内:(1)超级素数的个数;(2)最大的超级素数。 (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,J
N=0
M=0
A=0
FOR J=100 TO 999
IF(PRIME(J)=1) THEN
IF(PRIME(J\10)=1) THEN
IF(PRIME(J\100)=1) THEN
N=N+1
M=J
ENDIF
ENDIF
ENDIF
NEXT J
FOR J=1000 TO 9999
IF(PRIME(J) =1) THEN
IF(PRIME(J\10)=1) THEN
IF(PRIME(J\100)=1) THEN
IF(PRIME(J\1000)=1) THEN
N=N+1
M=J
ENDIF
ENDIF
ENDIF
ENDIF
NEXT J
? N,M
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-13求 1000~1200以内的所有纯素数。纯粹素数是这样定义的:一个素数,去
掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。
这样下去一直到最后剩下的个位数也还是素数。(纯素数不同于超级素数,注意
二者的区别) (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,J
N=0
M=0
A=0
FOR J=1000 TO 1200
IF(PRIME(J)=1) THEN
IF(PRIME(J MOD 1000 ))=1 THEN
IF(PRIME(J MOD 100)=1) THEN
IF(PRIME(J MOD 10)=1) THEN
? J,
ENDIF
ENDIF
ENDIF
ENDIF
NEXT J
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-14 一个合数,去掉最低位,剩下的数仍是合数,再去掉剩下的数的最低位,
余留下来的数还是合数,这样反复,一直到最后只剩下的一位数仍是合数;我
们把这样的数称为纯粹合数。求 100~500之间所有纯粹合数的个数。(★★)
DECLARE FUNCTION PRIME(X AS INTEGER)
DIM AS INTEGER N,M,A,J
N=0
M=0
A=0
FOR J=100 TO 500
IF(PRIME(J)=0) THEN
IF(PRIME(J\10)=0) THEN
IF(PRIME(J\100)=0) THEN
N=N+1
ENDIF
ENDIF
ENDIF
NEXT J
? N
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-15试找出 5个小于 160而成等差数列的素数。 (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,I,J
N=0
M=0
A=0
FOR I=2 TO 160
IF(PRIME(I)=1) THEN
FOR J=1 TO 39
IF((I+J<160) AND PRIME(I+J)=1) THEN
IF((I+2*J<160) AND PRIME(I+2*J)=1) THEN
IF((I+3*J<60) AND PRIME(I+3*J)=1) THEN
IF((I+4*J<60) AND PRIME(I+4*J)=1) THEN
? I,I+J,I+2*J,I+3*J,I+4*J
ENDIF
ENDIF
ENDIF
ENDIF
NEXT J
ENDIF
NEXT I
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-16 如果两个素数之和的一半仍然是一个素数,则这三个素数可以组成一个等
差素数组,如(3+7)/2=5,则(3,5,7)为一个等差素数组,编程求 100以
内的所有等差素数组。 (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,I,J
N=0
M=0
A=0
FOR I=2 TO 100
IF(PRIME(I)=1) THEN
FOR J=I+2 TO 100
IF(PRIME(J)=1) THEN
IF(PRIME((I+J)/2)=1) THEN
N=N+1
? I, (I+J)/2,J
ENDIF
ENDIF
NEXT J
ENDIF
NEXT I
? N
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
2-17 某自然数 n 的所有素数因子的平方和等于 n,(n<100),请找出二个这样
的自然数 n。 (★★)
DECLARE FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER N,M,A,I,J
N=0
A=0
FOR I=2 TO 100
M=0
FOR J=2 TO I
IF((PRIME(J)=1) AND ((I MOD J) =0)) THEN
M=M+J^2
ENDIF
NEXT J
IF M=I THEN ? I,
NEXT I
FUNCTION PRIME(BYVAL X AS INTEGER) AS INTEGER
DIM AS INTEGER I,A
A=SQR(X)
PRIME=1
FOR I=2 TO A
IF X MOD I = 0 THEN PRIME=0
NEXT I
END FUNCTION
SLEEP
END
第二章 素数类问题
2-1.判断一个数是素数的方法
2-2.打印从1到N之间的所有素数
2-3. 每一个素数的倒数都可以化为一个循环小数,例如:1/7可以化为0.(142857),1/13可化为0.(076923)。编程把17的倒数化为循环小数。(★★)(暂不做)
2-4编程求正整数M与N(M
本文档为【小学信息奥赛练习题集-FreeBasic版(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。