美素数

来源:互联网 发布:螳螂饲养盒 淘宝 编辑:程序博客网 时间:2024/05/01 18:11
Problem Description
  小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。
  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。
  给定一个区间,你能计算出这个区间内有多少个美素数吗?
 

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

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

Sample Input
31 1002 23 19
 

Sample Output
Case #1: 14Case #2: 1

Case #3: 4

//美素数 #include<iostream> #include<math.h>using namespace std;#define MAX 1000000  int ans[MAX] = {0, 0, 1};//int ans[MAX+2]={0,0,1};bool sushu(int n)  //判断是否为素数 {int i;int max=sqrt(n);if (n==0||n==1){return 0;}for(i=2;i<=max;i++){if(n%i==0){return 0;break;}}if(i>max){return 1;}} int weijia(int n)  //将各位数叠加 {int sum=0;while(n){sum=sum+n%10;n=n/10;}return sum;}int zonghe()  //判断素数的各位数值相加的数 是否也为素数  不能一一判断 因为一一判断最后时间复杂度会很高 //所以在这里打表 {////int p[num+1];//int count=0;////for(int i=2;i<=num;i++)//{//if(sushu(i) &&sushu(weijia(i)))//{//count++;//}//} //return count;int count=1;    //请注意  count的值为1!!!因为下面这个循环是从3开始, 而2本身满足这个条件! for(int i=3;i<=MAX;i++){if(sushu(i)&&sushu(weijia(i))){count++;}ans[i]=count;//ans[i+1]=count;} }int main(){zonghe();int num1,num2;int n;cin >>n;int j=1;while(j<=n){cin>>num1>>num2;//int count=0;//for(int i=num1;i<=num2;i++)//{//if(zonghe(i)) //{//count++;//}//} cout<<"Case #"<<j<<": "<<ans[num2]-ans[num1-1]<<endl;  //记得为num-1 j++;}}//在这题还学到一个 快速判别偶数的方法//代码如下//if((n&1)==0)  这里如果成立则是偶数 {} 



原创粉丝点击