浏览器标题切换
浏览器标题切换end

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;
}
posted @ 2019-09-25 22:01  抓水母的派大星  阅读(157)  评论(0)    收藏  举报