|
发表于 2024-4-6 15:13:51
|
显示全部楼层
这个基本上算不上什么算法,简单从短的向长的构造就可以了。
先是1位的只有3,5,7,然后每次前面添加一位看看是否还是素数(用HugeCalc判断就可以了)- #include <list>using namespace std;....typedef CHugeInt integer;typedef list<integer> THE_LIST;THE_LIST list1,list2;THE_LIST *orig_list, *new_list, *tmp_list;#define MAX_N 50 int i,j; integer v(1); int count=3; list1.push_back(integer(3));list1.push_back(integer(5));list1.push_back(integer(7)); orig_list=&list1; new_list=&list2; printf("3\n5\n7\n"); printf("Total 3 for length 1\n"); for(i=2;i<=MAX_N;i++){ new_list->clear(); v*=10; THE_LIST::iterator it; for(it=orig_list->begin();it!=orig_list->end();++it){ integer& u=*it; for(j=1;j<=9;j++){ integer cur(j*v+u); if(CHugeInt(cur).IsPrime()){ new_list->push_back(cur); printf("%s\n",cur.GetStrA(FS_NORMAL)); count++; } } } printf("Total %d for length %d\n",new_list->size(),i); if(new_list->size()==0)break; tmp_list=orig_list; orig_list=new_list; new_list=tmp_list; } printf("Total %d found\n",count);
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|