阅读理解
时间限制:
4000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
阅读以下代码:
#include<stdio.h>
bool _(int __)
{
int ___=1;
for(___++; ___<__; ___++)
if(!(__%___))
return false;
return true;
}
int main()
{
int a,b,cnt=0;
while(~scanf("%d%d",&a,&b))
{
printf("Case %%%d:",++cnt);
int count=0;
for(int i=a; i<=b; i++)
if(_(i))
count++;
printf("%d\n",count);
}
}PS: _ 为合法标识符。
-
输入
- 输入两个数(0 < a <= b < 100000 ) 输出
- 格式及细节见代码及输出样例 样例输入
-
2 3 3 5
样例输出
-
Case %1:2 Case %2:2
来源
- 流年 上传者
主要是最后一个//看清楚了
0 1 2 3 4 5 6 7 8 9 10
1 2 3 4 4 5 5 6 6 6 6
#include<iostream> #include<stdio.h> using namespace std; const long N = 200000; long prime[N] = {0},num_prime = 0; int isNotPrime[N] = {1, 1}; int a[N]; void du() { a[0]=1;//之前没看清楚到0和1也算 a[1]=2; for(long i = 2 ; i < N ; i ++) { if(! isNotPrime[i]) prime[num_prime ++]=i; a[i]=num_prime +2;//这个数组的目的是累计有几个素数了 //关键处1 for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++) { isNotPrime[i * prime[j]] = 1; if( !(i % prime[j] ) ) //关键处2 break; } } } int main() { du(); int no,b,cnt=0; while(~scanf("%d%d",&no,&b)) { printf("Case %%%d:",++cnt); printf("%d\n",a[b]-a[no-1]);//把前面写清楚后就是这里了,主要是这里,一个规律,a[b]-a[no-1]。 } }