听灌多,P10580求条,玄关
  • 板块灌水区
  • 楼主OrinLoong
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/4 16:08
  • 上次更新2024/10/4 17:53:47
查看原帖
听灌多,P10580求条,玄关
539345
OrinLoong楼主2024/10/4 16:08
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long lolo;
const int MAXpdN=10,MOD=998244353;
int Q,X,Y,N,buc[MAXpdN];
lolo fastpow(lolo a,lolo b,lolo p){
	a%=p;lolo res=1;
	while(b){
		if(b&1)(res*=a)%=p;
		(a*=a)%=p,b>>=1;
	}
	return res;
}
lolo solve(int val,int n){
	memset(buc,0,sizeof(buc));
	int bcnt=0,cval=val;
	for(int i = 2;i*i<=val;i++){
		if(cval%i==0){
			bcnt++;while(cval%i==0){
				buc[bcnt]++,cval/=i;
			}
		}
	}
	if(!bcnt)bcnt++,buc[bcnt]++;
	lolo ans=1,cres;
	for(int i = 1;i <= bcnt;i++){
		int t=buc[i];
		cres=((fastpow(t+1,n,MOD)-(fastpow(t,n,MOD)*2%MOD)+MOD)%MOD+fastpow(t-1,n,MOD))%MOD;
		(ans*=cres)%=MOD;
	}
	return ans;
}
int main(){
	scanf("%d",&Q);
	for(int i = 1;i <= Q;i++){
		scanf("%d%d%d",&X,&Y,&N);
		printf("%lld\n",solve(Y/X,N));
	}
	return 0;
}
2024/10/4 16:08
加载中...