各位dalao,遇到一个玄学问题,求助qwq

P1593 因子和

superMB @ 2018-12-13 15:04:33

这个题在洛谷过了,poj死活过不了,对拍了一万年也没有问题,什么情况啊qwq

#include<cmath>
#include<cstdio>
#include<bitset>
#define ll long long
#define ri register int
using namespace std;
template<typename TP>inline void read(TP&x)
{
    x=0;int f=1;char c=getchar();
    while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    x*=f;
}
template<typename TP>inline void print(TP x)
{
    if(x<0)x=-x,putchar('-');
    if(x>=10)print(x/10);
    putchar(x%10+'0');
}
ll prime[66666],size;
bitset<66666>flag;
inline void make_prime(ll x)
{
    for(ll i=2;i<=x;++i)
    {
        if(!flag[i]) prime[++size]=i;
        for(ll j=1;j<=size&&prime[j]*i<=x;++j)
        {
            flag[prime[j]*i]=1;
            if(!(i%prime[j]))break;
        }
    }
}
ll st[66666][2],cnt;
inline void devide(ll x)
{
    for(ll i=1;i<=size;++i)
        if(x%prime[i]==0)
        {
            st[++cnt][0]=prime[i];
            while(x%prime[i]==0)
                ++st[cnt][1],x/=prime[i];
        }
    if(x!=1) st[++cnt][0]=x,++st[cnt][1];
}
inline ll Pow(ll x,ll y,ll mod)
{
    ll ans=1;
    x%=mod;
    for(ll i=y;i;i>>=1)
    {
        if(i&1)ans=ans*x%mod;
        x=x*x%mod;
    }
    return ans%mod;
}
ll ans=1;
ll a,b;
inline void get_ans()
{
    for(ri i=1;i<=cnt;++i)
    {
        if((st[i][0]-1)%9901)
            ans=ans*(Pow(st[i][0],st[i][1]*b+1,9901)-1)*Pow(st[i][0]-1,9899,9901)%9901;
        else ans=ans*(st[i][1]+1)%9901;
    }
}
int main()
{ 
    read(a),read(b);
    make_prime(sqrt(a)+1);
    devide(a);
    get_ans();
    print(ans);
    return 0;
}

by Joeywu_1101 @ 2018-12-14 13:08:05

@superMB

poj机子老,有些东西不支持


by superMB @ 2018-12-15 18:38:15

@Joeywu_1101 我用的这些东西又没有编译错误之类的qwq


by Joeywu_1101 @ 2018-12-16 16:00:14

那就不知道了,也许洛谷测试点水刚好过了


by Crybl @ 2019-03-10 09:30:03

961110001111 100 试一下


|