zoukankan      html  css  js  c++  java
  • 找素数(一些数任意组合,DFS)

    素数又称质数,是指一个大于 1 的正整数,如果除了 1 和它本身以外,不能再被其它的数整除, 例如:2、3、5、97 等都是素数。2 是最小的素数。
    现在,给你 n 个数字,请你从中选取一部分,用它们拼出一个最大的素数。
    注意:某个数字出现多少次你就可以用多少次,6 与 9 不能混用。

    样例 输入   3 2 7 9

    样例输出    97


     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N = 100000 + 5;
     4 int vis[50];
     5 bool prime[N];//prime[i]表示i是不是质数
     6 int p[N], tot;//p[N]用来存质数
     7 int n,a[10];
     8  
     9 void init(){
    10     for(int i = 2; i < N; i ++) prime[i] = true;//初始化为质数
    11     for(int i = 2; i < N; i++){
    12         if(prime[i]) p[tot ++] = i;//把质数存起来
    13         for(int j = 0; j < tot && i * p[j] < N; j++){
    14             prime[i * p[j]] = false;
    15             if(i % p[j] == 0) break;//保证每个合数被它最小的质因数筛去
    16         }
    17     }
    18 }
    19 int ans;
    20 void dfs(int m,int num)
    21 {
    22     if (prime[num])
    23     {
    24         ans=max(ans,num);
    25     }
    26     if (m>=n)
    27     {
    28         return ;
    29     }
    30     for (int i=1;i<=n;i++)
    31     {
    32         if (!vis[i])
    33         {
    34             vis[i]=true;
    35             dfs(m+1,num*10+a[i]);
    36             vis[i]=false;
    37         }
    38     }
    39 }
    40  
    41 int main()
    42 {
    43    init();
    44    scanf("%d",&n);
    45    for(int i=1;i<=n;i++)
    46    {
    47        scanf("%d",&a[i]);
    48    }
    49    dfs(0,0); //从0开始,使每一个数都有成为个位数的可能
    50    if(ans) printf("%d",ans);
    51    else printf("-1
    ");
    52    return 0;
    53 }
     
  • 相关阅读:
    java8新特性学习五(接口中的默认方法与静态方法)
    java8新特性学习四(Optional类)
    [record]WebLogic域之创建-文本界面
    [转]java 关于httpclient 请求https (如何绕过证书验证)
    数组与串,串的实现,KMP,BF算法
    git
    nginx设置重写规则
    深入PHP 第三章笔记
    进程和线程
    JS 获取 iframe内元素,及iframe与html调用
  • 原文地址:https://www.cnblogs.com/sylvia1111/p/12247533.html
Copyright © 2011-2022 走看看