24小时热门版块排行榜    

查看: 1068  |  回复: 5
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第四十一题 已有1人参与

又是一个数独数的题.

一个n位的数独数(pandigital)定义为: 包含1到n这n个数字, 且每个数字仅包含一次.

比如2143就是一个数独数, 同时他还是一个质数.

那么最大的n位数独质数是多少?

[ Last edited by holmescn on 2011-7-14 at 20:52 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 感谢参与 2011-07-14 20:11:47
引用回帖:
Originally posted by holmescn at 2011-07-13 09:24:04:
Python偷懒版:
# Project Euler Problem 41
#
#
# Gen Primes

from math import sqrt
from itertools import permutations

def isPrime(n):
    for x in xrange(2, int(sqrt(n))):

是"数独质数"啊,1-9肯定不是质数,sum(1:9)=45 mod 3 = 0啊

matlab的
CODE:

function result = euler41()
tic;
n = 7; % sum(1:9) mod 3 == 0, sum(1:8) mod 3 == 0
numlist = sort(str2num(perms('1':num2str(n))),'descend'); % get descend sort
result = isprime(numlist);
result = numlist(result==1); % find all primes
result = result(1); % find the biggest
toc;
end

结果
CODE:
% Elapsed time is 0.284507 seconds.
% ans =
%      7652413

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2011-07-14 19:18:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

holmescn

金虫 (正式写手)

★ ★ ★
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-07-13 09:53:24
Python偷懒版:
CODE:
# Project Euler Problem 41
#
#
# Gen Primes

from math import sqrt
from itertools import permutations

def isPrime(n):
    for x in xrange(2, int(sqrt(n))):
        if n % x == 0:
            return False
    return True

num = [9, 8, 7, 6, 5, 4, 3, 2, 1]

l = 9
left = 0
while l > 1:
    for x in permutations(num[left:], l):
        n = int("%d"*l % x)
        if isPrime(n):
            print "It is", n
            l = 1
            break
    l -= 1
    left += 1

Result: 7652413
Elapsed Time: 3.6 s

如果从7开始,那只要0.044s.

[ Last edited by holmescn on 2011-7-14 at 21:18 ]
2楼2011-07-13 09:24:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
xzhdty(金币+2): 欢迎常来 2011-07-14 15:43:00
改正后,用时不到0.002s了.也不用OpenMP了.
CODE:
Program euler41
    Implicit None
    Integer, Parameter :: N = 7
    Integer, Dimension(N) :: Digits
    Integer :: I, R, X

    ! Digits
    Digits = (/(I, I=N,1,-1)/)

    !$OMP PARALLEL SHARED(Digits) Private(R,I,X)
    !$OMP DO
    Do R = 9, 1, -1
        Do I = 1, Arrangement(N, R)
            X = Permutations(R, I)
            If(IsPrime(X)) Then
                Print *, X
            EndIf
        EndDo
    EndDo
    !$OMP END DO
    !$OMP END PARALLEL

Contains

    Function Arrangement(N, M) Result(R)
        Implicit None
        Integer, intent(in) :: N, M
        Integer :: R
        Integer :: I
        R = 1
        Do I = (N-M+1), N
            R = R * I
        End DO
    EndFunction

    Function IsPrime(N) Result(R)
        Implicit None
        Integer :: N, I
        Logical :: R
        R = .True.
        !$OMP PARALLEL SHARED(N, R) PRIVATE(I)
        !$OMP DO
        DO I = 2, Floor(Sqrt(N*1.0))
            If(Mod(N, I) == 0) Then
                R = .False.
            EndIf
        EndDo
        !$OMP END DO
        !$OMP END PARALLEL
        Return
    EndFunction

    Function Permutations(R, nth) Result(V)
        Implicit None
        Integer, Dimension(N) :: Indices
        Integer, Intent(In) :: R, nth
        Integer :: V
        Integer :: M
        Integer :: Factorial
        Integer :: I, J, K

        Indices = 1
        M = nth - 1
        V = 0
        Factorial = Arrangement(N-1, N-1)

        Do I = 1, R
            J = M / Factorial + 1
            M = Mod(M, Factorial)
            If(N.ne.I) Factorial = Factorial / (N-I)

            ! Find the index
            K = 1
            Do
                If(Indices(K) > 0) J = J - 1
                If(J .eq. 0) Exit
                K = K + 1
            End Do
            Indices(K) = 0

            ! Gen the Number
            V = V*10 + Digits(K)
        EndDo
    EndFunction
End Program euler41

[ Last edited by holmescn on 2011-7-14 at 21:21 ]
3楼2011-07-14 15:03:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-07-14 20:11:38
本来是要实现一个基于位置的全排列算法, 结果发现了一个用阶乘的算法. 真是意外的收获.

看上面的Fortran算法. 如果序列长度为m, 那第n个排列的第一个元素的index就是

然后第二个元素是剩下元素的第n1个全排列的第一个元素, 而n1由下面这个式子得到

这样,就能依次得到每个元素在原序列中的index了. 也就得到了第N个全排列.

[ Last edited by holmescn on 2011-7-14 at 17:06 ]
4楼2011-07-14 16:40:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +10 Kittylucky 2026-08-27 10/500 2026-08-28 07:10 by sincosx
[基金申请] 基金系统什么内容也没有 30+3 winsaint 2026-08-27 7/350 2026-08-28 07:06 by hejicker
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-28 05:13 by winsaint
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 申请删除本帖 +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by 宁静致远sy
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 系统查不到 +10 董八千 2026-08-26 10/500 2026-08-26 16:30 by Equinoxhua
[基金申请] 范进中举一文的中心思想 +9 炎黄贵胄 2026-08-22 10/500 2026-08-26 15:40 by semaglutide
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 国际合作可查了,中了面上 (EPI+1)(金币+50) +18 Ldrop2023 2026-08-26 18/900 2026-08-26 11:15 by cmrandy
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
[基金申请] 建议基金发布提前给出明确的时间点 +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
信息提示
请填处理意见