神奇数
来源:互联网 发布:邯郸中国网络菜市场 编辑:程序博客网 时间:2024/04/26 07:51
给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。
输出描述:
输出为一个整数,表示区间内满足条件的整数个数
输入例子:
11 20
输出例子:
6
代码如下:
#include <stdio.h>#include<math.h>#define SIZE 5int prime(int );int magnum(int * , int );int judge(int *, int );int main(){ int a,b; int numa[SIZE]; int count = 0; int ni; scanf("%d %d", &a, &b); while(a<=b){ ni=magnum(numa, a); count += judge(numa, ni); a++; } printf("%d\n",count); return 0;}//取各位数放入一个数组int magnum(int array[],int orig){ int i=0; while(orig){ array[i++] = orig % 10; orig /= 10; } return i;}//判断质数int prime(int number){ int i; if(number > 10){ for(i = 2;i <= sqrt(number);i++){ //注意:这里是sqrt if(number % i == 0) return 0; } return 1; } else return 0;}//判断所构成的两位数是否是质数,如果是质数,则返回1;否则返回0int judge(int array[], int n){ int i,j,t = 0; for(i = 0; i < n-1; i++){ for(j = i+1; j < n; j++){ if(array[i] * array[j]){ t = prime(array[i] * 10 + array[j])| prime(array[j] * 10 + array[i]); } if(t) return 1; } } return 0;}
编好后运行时发现比正确个数少,找了好长时间,一直没找出来问题出在哪。后来才发现judge函数中用穷举时内层的for循环没有把if(t) return 1;包括进来,导致内层循环一次的过程中,即使中间某一次满足 t=1, 也被这次内层循环结束后t=0的情况给覆盖了,从而丢掉了一些“神奇数”。
阅读全文
0 0
- 神奇数
- 神奇数
- 神奇数
- 神奇数
- 神奇数
- 神奇数
- 神奇的浮点数
- 神奇的catalan数
- 神奇的Catalan数
- 神奇的魔法数
- 神奇的花朵数
- Universe7的神奇数
- 算法-神奇数
- 神奇数-牛客网习题
- java神奇数
- 【算法题】神奇数
- 物理学之神奇的数
- 找出神奇的“水仙花”数
- “开启两个相同程序,双击Lancher后,Ubuntu崩溃”解决方法
- 汪国新委员出席2016全国政协十二届四次会议闭幕会
- 冒泡排序法
- highestOneBit()算法解析
- 反腐电影《决不饶恕》全国上映
- 神奇数
- =="和Equals的区别
- word2vec_basic.py详解
- python 机器学习的用法
- ContextWrapper中attachBaseContext()方法
- 初识AOP面向切面编程
- js中定义Map集合
- Hash表及java中的equals和hashcode方法(1)
- JavaScript Array 对象