BZOJ 2721: [Violet 5]樱花

Time Limit: 5 Sec  Memory Limit: 128 MB
Description

Input

Output

Sample InputSample OutputHINT

/**************************************************************

    Problem: 2721

    User: ictsing

    Language: C++

    Result: Accepted

    Time:384 ms

    Memory:13984 kb

****************************************************************/

 

//BZOJ2721 [Violet 5]樱花

#include <iostream>

#include <cstdio>

using namespace std;

const int mt = 1000000+5;

const int mod = 1e9+7;

typedef long long ll;

bool vis[mt];

int mn[mt],pri[mt];

int cnt=0;

inline int read()

{

    int num=0,flag=1;

    char ch;

    do{

       ch=getchar();

       if(ch=='-') flag=-1;

    }while(ch<'0'||ch>'9');

    do{

       num=num*10+ch-'0';

       ch=getchar();

    }while(ch>='0'&&ch<='9');

    return num*flag;

}

void getphi(int x)

{

    for(int i=2;i<=x;i++)

    {

        if(!vis[i]) pri[++cnt]=i,mn[i]=cnt;

        for(int j=1;j<=cnt&&pri[j]*i<=x;j++)

        {

            vis[pri[j]*i]=1,mn[pri[j]*i]=j;

            if(i%pri[j]==0) break;

        }

    }

}

int num[mt];

void cal(int x)

{

    while(x>1)

    {

        num[mn[x]]++;

        x/=pri[mn[x]];

    }

}

int main()

{

    int n=read();

    getphi(n);

    for(int i=1;i<=n;i++)

        cal(i);

    ll ans=1;

    for(int i=1;i<=cnt;i++)

        ans=ans*(num[i]*2+1)%mod;

    printf("%lld\n",ans);

    return 0;

}

 


评论

热度(6)