Description
众所周知,yjj对于数的要求非常高,今天她定义了一个这样的数,叫酷炫的数。所谓酷炫的数就是满足:
1、它不能含有除了2,3,7这三种素因子以外的素因子。
2、它各个位上的数字和必须是3的倍数。
3、它各个位上的数字必须含有至少一个4或者至少一个6。
现在yjj给出一个区间[L,R],聪明的你帮忙告诉yjj这区间里有多少个酷炫的数吧
Input
首先输入一个整数T,代表有T组测试实例。(1<=T<=10000)
对于每组测试,输入一行包含两个整数L、R,如题目所示。(1<=L<=R<=10,000)
Output
对于每组测试实例,输出一个整数占一行,代表酷炫的数的个数。
Sample Input
2
24 24
20 40
Sample Output
1
2
当时做的时候可能头有点昏,因为一个条件,
就一直错了。。。。。。之后看才找到问题
#include#include #include #include #include using namespace std;int main(){ int v[11100]={ 0};//v[i]表示1到i有多少个数满足 int v1[11100]={ 0};//用来标记1到5000中满足条件的数 int d[5510];//用来保存1到5000的素数,2,3,7除外 for(int i=0;i<5000;i++) d[i]=21000;//赋初值 int l=1; d[0]=5; for(int i=11;i<=5000;i++)//求素数 { int f=1; for(int j=2;j<=sqrt(i);j++) { if(i%j==0) { f=0; break; } } if(f) { d[l++]=i; } } int l1=0; for(int i=6;i<=10000;i++)//求满足条件的数 { int flag=1; for(int j=0;d[j]<=i/2&&flag;j++) //一开始是让d[j]<=sqrt(i);老坑了,一直找不到错误 //除了2,3,7素数外,不能被其它素数整除 //b[j]<=i/2;所以必须给b数组赋初值,不然可能会有其它问题 { if(i%d[j]==0) { flag=0; break; } } if(flag)//判断和是否能被3整除和是否含有4或6 { int t=0; int f=0; int s=i; while(s) { int q=s%10; s/=10; if(q==4||q==6) t++; f+=q; } if(f%3==0&&t>=1) { v[i]=++l1;//保存数量 v1[i]=1;//标记 } } if(v[i]==0) v[i]=l1;//保存数量 } int n; scanf("%d",&n); while(n--) { int L,R; scanf("%d%d",&L,&R); int y=0; if(v1[L])//判断L是否满足 y=1; printf("%d\n",v[R]-v[L]+y); } return 0;}