Python用集合和平方根求解素数

问题:编写程序,输出所有由1,2,3,4这四个数字组成的所有素数,并且在每个素数中每个数字只使用一次
以下是我编写的代码

digits = (1, 2, 3, 4)
for i in digits:
    ii = i*1000
    for j in digits:
        if j == i:
            continue
        jj = j * 100
        for k in digits:
            if k == i or k == j:
                continue
            kk = k * 10
            for m in digits:
                if m != i and m != j and m != k:
                    p = ii + jj + kk + m
                    for n in range(1234, int(p**0.5)+1):
                        if p % n == 0:
                            break
                    else:
                        print(p)

但是运行结果确是输出了所有由这四个数字组成的四位数
1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321
我想问一下是哪里出错了,希望能得到各位的指点

把打印素数放到最后一个for循环结束后,然后把判断素数从2开始即可。

修改如下:


digits = (1, 2, 3, 4)
for i in digits:
    ii = i*1000
    for j in digits:
        if j == i:
            continue
        jj = j * 100
        for k in digits:
            if k == i or k == j:
                continue
            kk = k * 10
            for m in digits:
                if m != i and m != j and m != k:
                    p = ii + jj + kk + m
                    prime=1  # 素数标志,默认当前的p为素数
                    #   判断素数 从2开始
                    for n in range(2, int(p**0.5)+1):
                # 如果区间的任意一个数可以整除p,标志此数不是素数,并退出循环        
                        if p % n == 0: 
                            prime=0 
                            break
                    if prime==1: # 判断完区间所有的数都不能整除p,则p为素数,打印它
                        print(p)
                    
       

img

扩展了一下,如果有重复数字也可以用


digits = (1, 2, 3, 4, 1)
arr = sorted(digits,reverse=True)
mn = sum([arr[- n - 1] * 10 ** (len(arr) - n - 1) for n in range(len(arr))] )
mx = sum([arr[n] * 10 ** (len(arr) - n - 1) for n in range(len(arr))] )
for i in range(mn,mx + 1):
    if sorted(str(i)) != sorted(str(mx)):
        continue
    for n in range(2,int(i ** .5) + 1):
        if i % n == 0:
            break
    else:
        print(i)

img