[CSP-S模拟测试]:春思(数学)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 22:42   11   0

蝶恋花·春景
花褪残红青杏小。燕子飞时,绿水人家绕。枝上柳绵吹又少。天涯何处无芳草!
墙里秋千墙外道。墙外行人,墙里佳人笑。笑渐不闻声渐悄。多情却被无情恼。
(本词是伤春之作,写春景清新秀丽。同时,景中又有情理,我们仍用何处无芳草(知音)以自慰自勉。苏轼的多情却被无情恼,也不仅仅局限于对佳人的相思。)


题目传送门(内部题28)


输入格式

两个非负整数$A,B$。


输出格式

仅一个正整数,表示答案。


样例

样例输入:

2 3

样例输出:

15


数据范围与提示

样例解释:

$2^3=8$,而$8$的因子有$1,2,4,8$,而$1+2+4+8=15$。

数据范围:

$A\leqslant {10}^{12},B\leqslant {10}^{12}$。


题解

见到数学题就是化式子(弃掉)。

$A^B=p_1^{k_1}\times p_2^{k_2}\time ...\times p_n^{k_n}$

$ans=(1+p_1+p_1^2+...+p_n^{k_1})(1+p_2+p_2^2+...+p_n^{k_2})...(1+p_n+p_n^2+...+p_n^{k_n})$

之后我们发现,可以直接用等比数列求和公式$S_n=a_1\times \dfrac{1-q^n}{1-q}$即可。

时间复杂度:$\Theta(\log^2 n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
long long A,B;
long long pri[50],cnt[50],wzc[50];
long long qpow(long long x,long long y)
{
 long long res=1;
 while(y)
 {
  if(y&1)res=res*x%9901;
  x=x*x%9901;
  y>>=1;
 }
 return res;
}
void pre_work()
{
 long long sqr=sqrt(A);
 for(int i=2;i<=sqr&&A^1;i++)
 {
  if(A%i)continue;
  pri[++pri[0]]=i;
  while(!(A%i))
  {
   A/=i;
   cnt[pri[0]]+=B;
  }
 }
 if(A^1)
 {
  pri[++pri[0]]=A;
  cnt[pri[0]]=B;
 }
}
int main()
{
 scanf("%lld%lld",&A,&B);
 pre_work();
 for(int i=1;i<=pri[0];i++)
  wzc[i]=(((qpow(pri[i]%9901,cnt[i]+1)-pri[i])%9901+9901)*qpow((pri[i]-1)%9901,9899)+1)%9901;
 wzc[0]=1;
 for(int i=1;i<=pri[0];i++)
  wzc[0]=wzc[0]*wzc[i]%9901;
 printf("%lld",wzc[0]);
 return 0;
}

rp++

转载于:https://www.cnblogs.com/wzc521/p/11475138.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP