求救!!!!WA了第十三个点,凑不出HACK数据> <
  • 板块P1593 因子和
  • 楼主csq_pig
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/1/19 21:35
  • 上次更新2024/1/20 09:40:37
查看原帖
求救!!!!WA了第十三个点,凑不出HACK数据> <
1073710
csq_pig楼主2024/1/19 21:35

大佬求调!

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll MOD=9901;
bool is_prime[100010];
ll prime[100010],t;
ll p[100010],s[100010],k,ans=1;
ll fast (ll a,ll q)
{
	ll k=a,s=1;
	while (q) {
		if (q&1) s=s*k%MOD;
		k=k*k%MOD;
		q>>=1;
	}
	return s%MOD;
}
ll a,b;
int main()
{
	scanf("%lld%lld",&a,&b);
	for (ll i=1;i<=100000;i++) is_prime[i]=true;
	for (ll i=2;i<=100000;i++) {
		if (is_prime[i]) prime[++t]=i;
		for (ll j=1;j<=t && prime[j]*i<=100000;j++) {
			is_prime[prime[j]*i]=false;
			if (i%prime[j]==0) break;
		}
	}
	for (ll i=1;i<=t;i++) {
		if (a%prime[i]==0)
			p[++k]=prime[i];
		while (a%prime[i]==0) {
			a/=prime[i];
			s[k]++;
		}
	}
	for (ll i=1;i<=k;i++) s[i]*=b;
	for (ll i=1;i<=k;i++) {
		if (p[i]%MOD==1 && p[i]!=1) {
			ans=ans+s[i]+1;
			ans%=MOD;
			continue;
		}
		ans=ans*(fast(p[i],s[i]+1)-1)%MOD;
		ans=ans*(fast(p[i]-1,MOD-2))%MOD;
	}
	if (a!=1) ans=ans*(1+a)%MOD;
	printf("%lld",(ans+MOD)%MOD);
	return 0;
}

2024/1/19 21:35
加载中...