有两种方案:
1、用筛法得到 中所有的素数,共 422652 个,剔除含有0、8、9数字之一的数;
2、通过组合算法,依次得到 7!=5040 个候选数,而后逐一甄别是否为素数。
通过组合算法, 3*6!=2160 个候选数,末尾不能是2,4,5,6 我想知道你的程序代码?
我这个问题就看代码的精巧程度 我的代码:#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";
} :b:
很好很强大
回复 13# northwolves 的帖子
这段代码用到了 STL 编程,调用了 next_permutation 算法。虽然经历了字串到数字间的倒腾(可能相对比较费时),但就代码来是够简洁的。
疑问:not_prime、count 变量未作初始化=0,不知在不同的编译器上行为是否一致?:Q: 如果求所有的十进制表示中所有位上数字都不相同的素数呢? 肚子
我不懂
我的理解,你想求素数,且各位数字互不相等?
我想
1、最多8位
2、组成各位数字的数字和应该不能是3的倍数 另外, 我觉得
STL固然好
但C能用链表实现个简洁的算法 犯不着用链表,数组足矣。 :)
链表不等于指针啊
线性表同样可以模拟链表