欧拉之路

Posted hualian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉之路相关的知识,希望对你有一定的参考价值。

Prime digit replacements

技术图片

 

 枚举每一位放数字还是放未知的,如果为止的就拿1代替单独存

因为要有8个,所以我们可知未知的一定是三的倍数,末尾一定是1,3,7,然后暴力搞一搞(剪枝跑得飞快)

 

 1 #include<bits/stdc++.h>
 2 #define reg register
 3 #define int long long
 4 using namespace std;
 5 int last[3]={1,3,7};
 6 bool check(int x){//判断素数 
 7     if(x==1||(x%6!=1&&x%6!=5))
 8         return 0;
 9     if(x==2||x==3)return 1;
10     int MAX=sqrt(x);
11     for(int i=5;i<=MAX;i+=6)
12         if(x%i==0||x%(i+2)==0)
13             return 0;
14     return 1;
15 }
16 void dfs(int k,int unknow,int know,int rest){//第几位 未知的放的位置 已知的 还剩几个未知的 
17     if(k-1<rest)return;//最后一位不放未知的 
18     if(k==1){
19         for(int p=0;p<3;p++){//枚举最后一位 
20             int f=0,ans=0;
21             for(reg int i=0;i<=9;i++)
22             if(check((know+unknow*i)*10+last[p])){
23                 if(unknow>know&&i==0)ans--;
24                 ans++;
25                 if(!f)f=(know+unknow*i)*10+last[p];
26                 if(ans+(9-i)<8)break; //如果剩下全是还没有8个就退出 
27             }
28             if(ans==8){//输出答案 
29                 printf("%d
",f);
30                 exit(0);
31             }
32             f=0,ans=0;
33         }
34         return;
35     }
36     for(reg int i=0;i<=9;i++)
37         dfs(k-1,unknow*10,know*10+i,rest);//继续搜索 
38     dfs(k-1,unknow*10+1,know*10,rest-1);
39     return;
40 }
41 signed main(){
42     for(reg int k=1;;k++){
43         for(reg int l=3;l<k;l+=3)
44             dfs(k,0,0,l);
45     }
46     return 0;
47 }

 

以上是关于欧拉之路的主要内容,如果未能解决你的问题,请参考以下文章

麒麟信安根植欧拉:共筑中国操作系统崛起之路

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

python之路之前没搞明白4面向对象(封装)

《Python学习之路 -- Python基础之切片》

欧拉函数知识点总结及代码模板及欧拉函数表

欧拉函数及代码实现