Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2076|回复: 4

[已解决]VBA语言编写自然数排成一圈后为素数

[复制链接]
发表于 2016-4-19 09:25 | 显示全部楼层 |阅读模式
VBA语言编写自然数排成一圈后为素数


将1,2,3,...,20这20个连续的自然数排成一圈,使任意两个相邻的自然数之和均为素数



最佳答案
2016-4-19 16:04
奇数偶数相间,进行排列组合。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-4-19 16:04 | 显示全部楼层    本楼为最佳答案   
奇数偶数相间,进行排列组合。
回复

使用道具 举报

发表于 2016-4-19 21:53 | 显示全部楼层
本帖最后由 wanao2008 于 2016-4-19 21:55 编辑

2楼高手,想看代码!
回复

使用道具 举报

 楼主| 发表于 2016-4-19 22:49 | 显示全部楼层
wanao2008 发表于 2016-4-19 21:53
2楼高手,想看代码!

你到EH去看吧

http://club.excelhome.net/thread-1272658-1-1.html
回复

使用道具 举报

 楼主| 发表于 2016-4-20 14:18 | 显示全部楼层
Option Base 1
Dim arr(20), cnt%
Function ss(ByVal n%) As Boolean
    Select Case n
        Case 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37
            ss = True
        Case Else
            ss = False
    End Select
End Function
Sub s()
    Dim brr%(19)
    For i = 1 To 19
        brr(i) = i + 1
    Next
    arr(1) = 1
    p brr, 2
End Sub
Sub p(brr%(), k%)
    If k = 20 Then
        arr(20) = brr(1)
        If ss(arr(20) + arr(19)) And ss(arr(20) + arr(1)) Then
            Debug.Print Join(arr, ",")
            cnt = cnt + 1
            If cnt = 100 Then End   '太多,输出前100组
        End If
    Else
        ReDim crr%(20 - k)
        For i = 1 To 20 - k
            crr(i) = brr(i + 1)
        Next
        For i = 1 To 21 - k
            arr(k) = brr(i)
            If i > 1 Then crr(i - 1) = brr(i - 1)
            If ss(arr(k) + arr(k - 1)) Then
                p crr, k + 1
            End If
        Next
    End If
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 03:30 , Processed in 1.605260 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表