northwolves 发表于 2008-12-23 17:23:40

原帖由 gxqcn 于 2008-12-23 09:51 发表 http://bbs.emath.ac.cn/images/common/back.gif
有两种方案:

1、用筛法得到 中所有的素数,共 422652 个,剔除含有0、8、9数字之一的数;

2、通过组合算法,依次得到 7!=5040 个候选数,而后逐一甄别是否为素数。

通过组合算法, 3*6!=2160 个候选数,末尾不能是2,4,5,6

无心人 发表于 2008-12-23 21:45:36

我想知道你的程序代码?

我这个问题就看代码的精巧程度

northwolves 发表于 2008-12-24 00:23:55

我的代码:#include<algorithm>
#include <iostream>
using namespace std;
int not_prime;
main(){
    int i,j,count;
    not_prime=0;
    for(i=3;i<2761;i+=2){
      if(!not_prime){
            for(j=i*i;j<7654321;j+=2*i)
                not_prime=1;
      }
}
char a[]="1234567";
do{
i=atoi(a);
if (i%2==1 && not_prime==0){
cout << i << "\n";
count++;
}}
while(std::next_permutation(a,a+7));
cout << count-1 << "\n";
}

无心人 发表于 2008-12-24 08:08:53

:b:

很好很强大

gxqcn 发表于 2008-12-24 08:11:36

回复 13# northwolves 的帖子

这段代码用到了 STL 编程,调用了 next_permutation 算法。
虽然经历了字串到数字间的倒腾(可能相对比较费时),但就代码来是够简洁的。

疑问:not_prime、count 变量未作初始化=0,不知在不同的编译器上行为是否一致?:Q:

mathe 发表于 2008-12-24 08:14:19

如果求所有的十进制表示中所有位上数字都不相同的素数呢?

无心人 发表于 2008-12-24 08:25:34

肚子
我不懂

我的理解,你想求素数,且各位数字互不相等?
我想
1、最多8位
2、组成各位数字的数字和应该不能是3的倍数

无心人 发表于 2008-12-24 08:26:45

另外, 我觉得
STL固然好
但C能用链表实现个简洁的算法

gxqcn 发表于 2008-12-24 08:46:12

犯不着用链表,数组足矣。

无心人 发表于 2008-12-24 08:57:11

:)

链表不等于指针啊
线性表同样可以模拟链表
页: 1 [2] 3
查看完整版本: 七彩素数问题