CodeForces 546D Soldier and Number Game

来源:互联网 发布:专门做软件的网站 编辑:程序博客网 时间:2024/06/05 19:21

题意:

给定T最数据, x,和y 

每次除一次可以得到1分,问尽可能多的做除法,能最多除几次

思路:

在素数筛的时候同时维护num数组,尽可能多的使i拥有更多的因子。

感想:

第一次知道在筛的同时可以加以处理,对于时间复杂度的影响很小。自己做的时候在筛完之后重新扫了一遍,TLE了。以后注意

#include <iostream>#include <stdio.h>#define maxn 5000010using namespace std;typedef long long ll;bool prim[maxn];bool vis[maxn];int  num[maxn];ll ans;void init(){    prim[1]=0;    for(int i=2;i<=maxn;i++)    {        if(!prim[i])        {            for(int j=i;j<=maxn;j+=i)            {                int temp=j;                while(temp%i==0)                {                    num[j]++;                    temp/=i;                }                prim[j]=1;            }        }    }    for(int i=2; i<=maxn; i++)        num[i]=num[i]+num[i-1];}int main(){    init();    int T;    cin>>T;    while(T--)    {        int x,y;        scanf("%d%d",&x,&y);        ans=0;        printf("%d\n",num[x]-num[y]);        //cout<<num[x]<<" "<<num[y]<<endl;    }    return 0;}



0 0
原创粉丝点击