• 约数之和


    题目描述

    假设现在有两个自然数A和B,S是(A^B)的所有约数之和。

    请你求出S mod 9901的值是多少。

    输入格式

    在一行中输入用空格隔开的两个整数A和B。

    输出格式

    输出一个整数,代表S mod 9901的值。

    数据范围

    0(leq) A,B (leq) 5*(10^7)

    输入样例

    2 3

    输出样例

    15

    注意: A和B不会同时为0。

    思路

    我们首先了解一下约数和定理。对这个定理不太了解的同学可以先点击这里了解一下:约数和定理
    由我们已经知道的约数和定理可以知道。当A=p1k1+p2k2+p3k3+...+pnkn 时。
    那么A的所有的约数之和就是(根据高中学习的乘法原理)
    f(A)=(p10+p11+...+p1k1)*(p20+p21+...+p2k2)*...*(pn0+pn1+...+pn^kn)。
    那么同理我们也可以求出(A^B)的约数之和。
    因为
    (A^B)=p1(k1*B)*p2(k2*B)*p3(k3*B)*...*pn(kn*B)
    具体原因大家可以仔细想想,不难理解。
    其中代码中的quick函数是快速幂函数。
    对这个不是很理解的同学可以看一下我的这篇文章来学习一下:快速幂||取余运算

    递归C++ 代码

    #include<iostream>
    using namespace std;
    const int mod = 9901;
    int quick(int p, int k)
    {
    	p = p % mod;
    	if (k == 0)  return 1;
    	int res = 1;
    	while (k)
    	{
    		if (k & 1)
    			res = (res * p) % mod;
    		k = k >> 1;
    		p = (p * p) % mod;
    	}
    	return res%mod;
    }
    int sum(int p, int k)
    {
    	if (k == 0)
    		return 1;
    	if ((k & 1) == 0)//k为偶数的情况下
    		return ((sum(p, k - 1) % mod) * p+1) % mod;
    	//k为奇数的情况下
    	return  (((quick(p, k / 2 + 1) + 1) % mod) * (sum(p, k / 2) % mod)) % mod;
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	int A, B;
    	cin >> A >> B;
    	int res = 1;
    	for (int p = 2;p <= A;p++)//对A分解质因数
    	{
    		int k = 0;
    		while (A % p == 0)
    		{
    			k++;
    			A /= p;
    		}
    		if(k)
    		res = res * sum(p%mod, k * B)%mod;
    		//注意:这里为什么要乘B,因为我们计算的是A^B%mod的值.
    		//举个例子:A=p1^k1+p2^k2+p3^k3+...+pn^kn。
    		//那么则有:A^B=p1^(k1*B)+p2^(k2*B)+p3^(k3*B)+...+pn^(kn*B)。
    		//具体原因大家可以仔细想想,不难理解
    	}
    	cout << res << endl;
    	return 0;
    }
    
    
  • 相关阅读:
    springMVC之配置
    compareTo(String str)与compareToIgnoreCase(String str)
    js中的json
    Java转json
    mxnet 豆瓣镜像源安装
    查看 tensorflow 是GPU版本 还是CPU版本
    nvidia-docker安装
    ubuntu下安装tensorflow-gpu版本过程
    CUDA, CUDNN 版本查询
    ubuntu版本查看命令
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13576945.html
Copyright © 2020-2023  润新知