博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015 HUAS Summer Trainning #6~H
阅读量:4325 次
发布时间:2019-06-06

本文共 1116 字,大约阅读时间需要 3 分钟。

Description

  小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。
 
  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。 
  给定一个区间,你能计算出这个区间内有多少个美素数吗?
 

Input

第一行输入一个正整数T,表示总共有T组数据(T <= 10000)。
 
接下来共T行,每行输入两个整数L,R(1<= L <= R <= 1000000),表示区间的左值和右值。
 

Output

对于每组数据,先输出Case数,然后输出区间内美素数的个数(包括端点值L,R)。
 
每组数据占一行,具体输出格式参见样例。
 

Sample Input

3
1 100
2 2
3 19
 

Sample Output

Case #1: 14
Case #2: 1
Case #3: 4
解题思路:题目的意思是一个十进制数,如果它是素数并且它的各位数字之和也是素数,那么这个数称为“美素数”。这里需要注意的是它输入的两个数也就是端点也要算入其中,例如2和3,算入端点的话答案应该为2.我第一次做是用了一个for循环然后用数组一一标记,很显然我超时了,然后试着运用了另一种方法。
程序代码:
#include
const int N=1000000; int a[N]; int prim(int x) { int i; if(x==2) return 1; for(i=2;i*i<=x;i++) if(x%i==0) return 0; return 1; } int main() { int j=0,i,v,m,n,sum,count,f=1; a[j++]=2; for(i=3;i<=1000000;i+=2) if(prim(i)) { int t=i; sum=0; while(t) { sum+=t%10; t/=10; } if(prim(sum)) { a[j++]=i; } } scanf("%d",&v); while(v--) { scanf("%d%d",&m,&n); count=0; for(i=0;a[i]<=n;i++) if (a[i]>=m&&a[i]<=n) count++; printf("Case #%d: %d\n",f++,count); } return 0; }

转载于:https://www.cnblogs.com/chenchunhui/p/4737769.html

你可能感兴趣的文章
Ubuntu菜鸟入门(五)—— 一些编程相关工具
查看>>
valgrind检测linux程序内存泄露
查看>>
Hadoop以及组件介绍
查看>>
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>
时钟系统
查看>>
BiTree
查看>>
5个基于HTML5的加载动画推荐
查看>>
水平权限漏洞的修复方案
查看>>
静态链接与动态链接的区别
查看>>
Android 关于悬浮窗权限的问题
查看>>
如何使用mysql
查看>>
linux下wc命令详解
查看>>
敏捷开发中软件测试团队的职责和产出是什么?
查看>>
在mvc3中使用ffmpeg对上传视频进行截图和转换格式
查看>>
python的字符串内建函数
查看>>
Spring - DI
查看>>