CodeForces546D - Soldier and Number Game - 素数筛模板题
题解
素数筛模板题,不能用单纯暴力来解。
AC代码
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=5e6+10;
//int book[N];
//int pri[N/2];
int p;
int sum[N];
int book[N];
//int prime(int n)
//{
// for(int i=2;i*i<=n;i++)
// {
// if(n%i==0)
// return 0;
// }
// return 1;//是素数
//}
void init()
{
memset(book,0,sizeof(book));
memset(sum,0,sizeof(sum));
book[0]=1,book[1]=1;
// p=0;
for(int i=2; i<=N; i++)
{
if(book[i]==0)
{
// pri[p++]=i;
for(int j=i; j<=N; j+=i)
{
book[j]=1;
int kk=j;
while(kk%i==0)
{
sum[j]++;
kk/=i;
}
}
}
}
for(int i=2; i<=N; i++)
sum[i]+=sum[i-1];
}
int main()
{
init();
int t,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&a,&b);
// b=b-1;
// int ans=0;
// for(int i=a;i<=b;i++)
// {
// cout<<"**"<<endl;
// if(book[i]==0)
// ans++;
// else
// {
// for(int j=2;j<p&&pri[j]*pri[j]<=i;j++)
// {
// while(i%j==0)
// {
// i/=j;
// }
// ans++;
// }
// }
//
// }
// printf("%d\n",sum[a]-sum[b-1]);
printf("%d\n",sum[a]-sum[b]);
}
return 0;
}

浙公网安备 33010602011771号