回 帖 发 新 帖 刷新版面

主题:各位大虾,急求一题!!!!!!

3、求素数个数(2002年省小学组竞赛题三前半题)将1,2,…,n个数(n<=7)按顺时针方向排成一圈,然后从任意位置开始按顺时针方向连续取k个数字组成一个k位数。(k<n)
例如:n=3 k=2按顺时针方向排成如下一圈:
                    1

             3            2                            
    此时可组成:12,23,31。其中的素数有23,31。
问题一:当给出n、k后,求出在n个k位数种有多少个素数?
问题二:将这n个数重新排列,找出能产生k位数中的素数最多的一种排列,并统计出可能产生的素数个数。
输入:n,k
输出:x1     ‘问题一的解
      X2      ‘问题二的解(仅需个数,不用输出排列)

求程序与思路!!!!!

回复列表 (共1个回复)

沙发

CLS
INPUT N,K
DIM A(N)
FOR I=1 TO N
  A(I)=I
NEXT I
DO WHILE A(0)=0
  H=H+1
  X=0
  FOR I=1 TO N  ‘取数做统计素数
    S$=""
    FOR J=1 TO K
      T=I+J-1
      IF T>N THEN T=T-N
      S$=S$+LTRIM$(STR$(A(T)))
    NEXT J
    S=VAL(S$)
    F=0
    FOR J=2 TO INT(SQR(S))
      IF S MOD J=0 THEN F=1:EXIT FOR
    NEXT J
    IF F=0 THEN X=X+1   
  NEXT I
  IF H=1 THEN PRINT X,    ‘先打印第一次的
  IF MAX<X THEN MAX=X     ‘打擂台比谁大
  L=N                     ‘以下是生成法全排列
  DO WHILE A(L)<=A(L-1)
    L=L-1
  LOOP
  J=N
  DO WHILE A(J)<=A(L-1)
    L=L-1
  LOOP
  SWAP A(J),A(L-1)
  FOR Q=L TO N-1
    FOR P=Q+1 TO N
      IF A(Q)>A(P) THEN SWAP A(P),A(Q)
  NEXT P,Q
LOOP
PRINT MAX

我来回复

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