蒟蒻求助数学题

P1593 因子和

Jorisy @ 2022-04-10 16:55:54

40pts,WA on #1~10

按算法竞赛进阶指南的分治思路去做的。。。

code:

#include<bits/stdc++.h>
#define ll long long
#define mod 9901
using namespace std;

ll qpow(ll x,ll p)
{
    ll ans=1;
    while(p)
    {
        if(p&1) ans=ans*x%mod;
        else x=x*x%mod;
        p>>=1;
    }
    return ans;
}

ll sum(ll p,ll c)
{
    if(c==0) return 1;
    if(c==1) return p+1;
    if(c&1) return (1+qpow(p,(c+1)/2))*sum(p,(c-1)/2)%mod;
    return ((1+qpow(p,c/2))*sum(p,c/2-1)+qpow(p,c))%mod;
}

int main()
{
    ll a,b,ans=1,i=2,x=0;
    cin>>a>>b;
    while(a>1)
    {
        if(a%i==0)
        {
            x++;
            a/=i;
        }
        else
        {
            ans=ans*sum(i,b*x)%mod;
            i++;
            x=0;
        }
    }
    ans=ans*sum(i,b*x)%mod;
    i++;
    x=0;
    cout<<ans;
    return 0;
}

by 3a51_ @ 2022-04-10 17:01:32

看样子是sum写错了。


by Jorisy @ 2022-04-10 17:03:51

@Tothetime_tolife orz可是哪里错了呢。。


by nydzsf_qwq @ 2022-04-10 17:08:54

这题能有蓝?!

离谱


by 3a51_ @ 2022-04-10 17:10:25

@JY 这个可以错位相减把


by Jorisy @ 2022-04-10 17:16:00

@Tothetime_tolife

如果使用等比数列求和公式,需要做除法。而答案案还需要对 9901 取模,\bmod 运算只对加、减、乘有分配率,不能直接对分子、分母分别取模后再做除法。

书上这么说的。。


by 3a51_ @ 2022-04-10 17:25:28

@JY 逆元不行吗/xyx


by Jorisy @ 2022-04-10 17:30:01

@Tothetime_tolife 不会


by Ginger_he @ 2022-04-10 18:05:36

@JY 这题要先会逆元吧


by Ginger_he @ 2022-04-10 18:07:33

@JY 简单来说就是 \dfrac{a}{b}\equiv a\times b^{c-2}(\mathrm{mod}\,c)


|