给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,13是

Posted olive_gyr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,13是相关的知识,希望对你有一定的参考价值。

给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。 

输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。

输出描述:

输出为一个整数,表示区间内满足条件的整数个数

输入例子:
11 20

输出例子:
6

思路:把区间内的数字拆分成所有可能的两位数,判断新的两位数是否为素数

 1 #include<stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 #include <vector>
 5 using namespace std;
 6 
 7 bool isPrime(int num) { //判断素数的函数 
 8     for (int i = 2;i <= sqrt(num);i++) {
 9         if (num%i == 0) 
10             return false;
11     }
12     return true;
13 }
14  
15 int main()
16 {
17     int a, b, count = 0;
18     scanf("%d %d",&a,&b); 
19     if(b<=10)
20     {
21         printf("0");
22         return 0;
23     }
24     for(int i=a;i<=b;i++)
25     {
26         bool isS = false;
27         vector<int> arr;
28         int tmp = i;
29         while (tmp)
30         {
31             arr.push_back(tmp % 10);//吧范围内的数 每个数位放进数组中 
32             tmp /= 10;
33         }
34  
35         for (int j = 0;j<arr.size();j++)//用j表示十位 
36         {    
37             if(arr[j]==0)//是偶数,j选下一个值 
38             {
39                 continue;
40             }
41             
42             for(int k=0;k<arr.size();k++)//用k表示个位 
43             {
44                 if(k==j)//十位和个位不能选同一个数位,k选下一个 
45                 {
46                     continue;
47                 }
48                 
49                 int now = arr[j] * 10 + arr[k];//组成的jk这个两位数 
50               
51                 if(isPrime(now))
52                 {
53                     
54                     isS = true;
55                     printf("\\%d ",now); //输出组成的饿素数,此题不需要输出 
56                     break;//是神奇的数,则不用检测jk其他情况
57                 }
58             }
59             
60             if (isS)//如果已经是神奇的数,就不用再检测后面不同j的情况了
61             {
62                 count++;
63                 break;
64             }
65         }
66          
67     }
68     printf("\\n%d",count);//此题不需要换行
69     return 0;
70 }

 

 


 


以上是关于给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,13是的主要内容,如果未能解决你的问题,请参考以下文章

C语言 判断一个数字是不是在一个指定的区间范围内?求解答。。。。

区间最值ST算法

区间内素数的个数

差分BZOJ 1635 [Usaco2007 Jan]Tallest Cow 最高的牛

置信区间、显著性检验和统计学意义

POJ3614 Sunscreen 贪心入门