Comet oj C0275 [USACO]特殊的质数肋骨

C0275 [USACO]特殊的质数肋骨

题目描述

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

输入描述

单独的一行包含 NN。

输出描述

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

样例输入

4
样例输出

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

解题思路:
1,从一位已是素数的数往上进行递推;
2,每增加一位进行判断一次是否为素数,若为素数,则继续,否则,则不再进行处理;
3,一直到位数递推到n位,输出结果.

#include<stdio.h>
#include<math.h>
int n;
int prime(int n);
void fun(int x,int y);
int main()
{
    scanf("%d",&n);
    fun(2,1);                                   //从一位为素数开始往上递推
    fun(3,1);
    fun(5,1);
    fun(7,1);
    return 0;
}

int prime(int n)                                //判断素数
{
    int i;
    if(n == 1 || n == 0)  return 0;
    for(i = 2 ; i*i <= n ; i++ )
    {
        if(n%i == 0)  return 0;
    }
    return 1;
}

void fun(int x,int y)                           //x表示数值,y表示位数
{
    int i;
    if(y == n)
    {
        printf("%d\n",x);
        return;
    }
    for(i = 1 ; i <= 9 ; i++ )
    {
        if(prime(x*10+i))
            fun(x*10+i,y+1);                    //每一次*10就相当于往高位走了一位,位数+1
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值