本题的疑惑
查看原帖
本题的疑惑
291838
小鸟飞飞飞楼主2022/2/6 18:38

根据推导,这个题大概就是让求b^(k-1)的因数个数(应该是这样的吧),按照此思路来写,用分解质因数的办法去求(其中质数打表了),不知为何,只有40分,不加k=2的特判只有20分。样例过、手造的几个数据过,还请大佬指出错误,谢谢了[爱心]

#include <bits/stdc++.h>
using namespace std;

int zhishu[1000]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317};

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int b,k;
        long long panduan[1000]={},yinshu=1;
        cin >> b >> k;
        if (k==1)
        {
            cout << "1" << endl;
            continue;
        }
        else if (b==2||b==3)
        {
            cout << k << endl;
            continue;
        }
        else if (k==2)
        {
            int ans=0;
            for (int i=1;i<=b;i++)
            {
                if (b%i==0)
                {
                    ans++;
                }
            }
            cout << ans << endl;
            continue;
        }
        else
        {
            int num,bb=b;
            for (int i=1;i<=sqrt(b);i++)
            {
                while (bb%zhishu[i]==0)
                {
                    panduan[i]++;
                    bb/=zhishu[i];
                }
                if (zhishu[i]>=sqrt(b))
                {
                    num=i;
                    if (bb==b)
                    {
                        panduan[num]++;
                    }
                    break;
                }
            }
            for (int i=1;i<=num;i++)
            {
                if (panduan[i]!=0)
                {
                    panduan[i]*=(k-1);
                    panduan[i]%=998244353;
                    yinshu*=(panduan[i]+1);
                    yinshu%=998244353;
                }
            }
            cout << yinshu << endl;
            continue;
        }
    }
    return 0;
}
2022/2/6 18:38
加载中...