zoukankan      html  css  js  c++  java
  • 【JZOJ5340】春思【数论,数学】

    题目大意:

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


    思路:

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

    NN MM 1 2 3 4 5
    2 3 7 15 31 63
    3 4 13 40 121 364
    4 7 31 127 511 2047
    5 6 31 156 781 3906
    6 12 91 600 3751 22932

    可以发现,对于NN是质数,有ans(N,M)=Nm+Nm1+Nm2+...+N1+1ans(N,M)=N^m+N^{m-1}+N^{m-2}+...+N^1+1
    对于NN是合数,有ans(N,M)=ans(d[x],k[x]×M)×ans(d[y],k[y]×M)...ans(N,M)=ans(d[x],k[x] imes M) imes ans(d[y],k[y] imes 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<<"
    ";
    	return 0;
    }
    
  • 相关阅读:
    华为ensp使用
    网络学习目录
    MySQL简介
    zip命令详解
    gzip命令详解
    unzip/tar命令详解
    tar命令详解
    ipython使用
    os, sys, stat 模块使用
    配置linux系统时区---解决ntp同步完时间不准问题
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998506.html
Copyright © 2011-2022 走看看