【JZOJ5340】春思【数论,数学】

题目大意:

题目链接:https://jzoj.net/senior/#main/show/5340
题目图片:
http://wx2.sinaimg.cn/mw690/0060lm7Tly1fwepmh2hffj30jp0cwac2.jpg
http://wx4.sinaimg.cn/mw690/0060lm7Tly1fwepmh2vacj30jq0e8mxt.jpg
N M N^M NM的因子和。


思路:

首先把 N N N分解质因数,那么可以得到
N = d [ 1 ] k [ 1 ] × d [ 2 ] k [ 2 ] × . . . × d [ s u m ] k [ s u m ] N=d[1]^{k[1]}\times d[2]^{k[2]}\times ... \times d[sum]^{k[sum]} N=d[1]k[1]×d[2]k[2]×...×d[sum]k[sum]
然后可以得到
N M = d [ 1 ] k [ 1 ] × M × d [ 2 ] k [ 2 ] × M × . . . × d [ s u m ] k [ s u m ] × M N^M=d[1]^{k[1]\times M}\times d[2]^{k[2]\times M}\times ... \times d[sum]^{k[sum]\times M} NM=d[1]k[1]×M×d[2]k[2]×M×...×d[sum]k[sum]×M
之后就打表(别怪我蒟蒻太菜)

N N N \ M M M12345
237153163
341340121364
47311275112047
56311567813906
61291600375122932

可以发现,对于 N N N是质数,有 a n s ( N , M ) = N m + N m − 1 + N m − 2 + . . . + N 1 + 1 ans(N,M)=N^m+N^{m-1}+N^{m-2}+...+N^1+1 ans(N,M)=Nm+Nm1+Nm2+...+N1+1
对于 N N N是合数,有 a n s ( N , M ) = a n s ( d [ x ] , k [ x ] × M ) × a n s ( d [ y ] , k [ y ] × M ) . . . ans(N,M)=ans(d[x],k[x]\times M)\times ans(d[y],k[y]\times M)... ans(N,M)=ans(d[x],k[x]×M)×ans(d[y],k[y]×M)...
然后加上一个逆元即可。


代码:

#include <cstdio>
#include <iostream>
#define N 500
#define MOD 9901
#define ll long long
using namespace std;

int sum;
ll n,m,d[N],k[N];

ll ksm(ll x,ll y)
{
	ll ans=1;
	x%=MOD;
	while (y)
	{
		if (y&1) ans=(ans*x)%MOD;
		y>>=1;
		x=(x*x)%MOD;
	}
	return ans;
}

ll S(ll x,ll y)
{
	ll ans=1;
	if (!((x-1)%MOD))
	  return y+1;
	ll inx=ksm(x-1,MOD-2);
	ll k=(ksm(x,y+1)+MOD-1)%MOD;
	ans=k*inx%MOD;
	return ans;
}

int main()
{
	cin>>n>>m;
	for (ll i=2;i*i<=n;i++)  //分解质因数
	 while (!(n%i))
	 {
	 	if (d[sum]!=i) d[++sum]=i;
	 	k[sum]++;
	 	n/=i;
	 }
	if (n>1)
	{
		d[++sum]=n;
		k[sum]++;
	}
	ll ans=1;
	for (int i=1;i<=sum;i++)
	 ans=ans*S(d[i],k[i]*m)%MOD;
	cout<<ans%MOD<<"\n";
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值