社区讨论

求救!!!!WA了第十三个点,凑不出HACK数据> <

P1593因子和参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lrkop0g0
此快照首次捕获于
2024/01/19 21:36
2 年前
此快照最后确认于
2024/01/20 09:40
2 年前
查看原帖
大佬求调!
CPP
#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...