zoukankan      html  css  js  c++  java
  • 2319__1.5.3 Superprime Rib 特殊的质数肋骨

    [Submit][Status][Forum]

    Description

    农民约翰母牛总是产生最好的肋骨。 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数,举例来说: 7 3 3 1 全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。 7331 被叫做长度 4 的特殊质数。 写一个程序对给定的肋骨的数目 N (1<=N<=8),求出所有的特殊质数。 数字1不被看作一个质数。

    Input

    单独的一行包含N。

    Output

    按顺序输出长度为 N 的特殊质数,每行一个。

    Sample Input

    4

    Sample Output

    2333
    2339
    2393
    2399
    2939
    3119
    3137
    3733
    3739
    3793
    3797
    5939
    7193
    7331
    7333
    7393

    分析:还是没有完全理解到递归的思想,想不到递归那去。想了很久也没搞定,在网上找了题解,所以这题用递归。不管是几位数,它的第一个数一定是,2,3,5,7,确定了第一个数,第二个数之后的数就在(1,9)之间遍历,如果是素数并且位数等于所给的位数就输出。终止条件就是满足条件的位数等于所给的位数。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int n;
     7 int prime(int m)//判断是否为素数数
     8 {
     9     int k,i;
    10     k=sqrt(m);
    11     for(i=2;i<=k;i++)
    12     {
    13         if(m%i==0)
    14             break;
    15     }
    16     if(i==k+1)
    17         return 1;
    18     return 0;
    19 
    20 }
    21 void judge(int primer,int pos)//primer是质数,pos是位数
    22 {
    23     if(pos==1)
    24     {
    25         judge(2,2);
    26         judge(3,2);
    27         judge(5,2);
    28         judge(7,2);//当只有一位的时候
    29     }
    30     else
    31     {
    32         for(int i=1;i<=9;i++)
    33         {
    34             if(prime(primer*10+i)==1)//构造位数为pos+1的数
    35             {
    36                 if(pos==n)
    37                     printf("%d
    ",primer*10+i);//如果位数等于所给的位数
    38                 else
    39                 {
    40                     judge(primer*10+i,pos+1);//否则,位数+1,继续递归下去;
    41                 }
    42             }
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     while(~scanf("%d",&n))
    49     {
    50         if(n==1)
    51         {
    52             printf("2
    3
    5
    7
    ");//当位数为1的时候直接输出
    53         }
    54         else
    55         {
    56             judge(0,1);//否则进入judge,从位数pos=1开始找
    57         }
    58     }
    59     return 0;
    60 }



  • 相关阅读:
    一个完整的SQL SERVER数据库全文索引的示例
    sqlhelper for access
    解决打开网站弹出下载文件
    18句话入门SQLServer XML
    c# winform 自动关闭messagebox 模拟回车
    jquery json
    用超级巡警批量清除被挂马的网页
    sqlhelper for sql
    SQL XML DML 数据修改
    post方法易错地方
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/9723161.html
Copyright © 2011-2022 走看看