题目链接:http://lightoj.com/volume_showproblem.php?problem=1054

题意:给你两个数n和m, 求n^m的所有因子和,结果对1000000007求余;(n和m在int范围内)

 和求因子个数有一定的关系,一个数 n 可以表示成 n = p1^a1 * p2^a2 * p3^a3 * ... pk^ak,(其中pi是n的素因子)

那么n的因子和就是 (p1^0+p1^1+p1^2+...+p1^a1)*(p2^0+p2^1+p2^2+...+p2^a2)*...*(pk^0+pk^1+...+pk^ak);

至于为什么可以把这些拆开来想就好了;所以对于每一项我们要求等比数列的和,还有就是除法求余问题运用公式 a/b%mod = a*b^(mod-2);

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
typedef long long LL;
#define N 100005
using namespace std;
const double eps = 1e-;
const LL mod = ; int f[N], p[N], k = ;
void Prime()
{
for(int i=; i<N; i++)
{
if(!f[i]) p[k++] = i;
for(int j=i; j<N; j+=i)
f[j] = ;
}
} LL Pow(LL a, LL b)/// Calculate: a^b%mod;
{
LL ans = ;
while(b)
{
if(b&) ans = ans*a%mod;
a = a*a%mod;
b >>= ;
}
return ans;
}
///a/b%mod = a*b^(mod-2)%mod;
LL Sn(LL q, LL n)/// Calculate: (q^n-1)/(q-1)%mod;
{
LL ans = Pow(q, n);
ans = (ans-) * Pow(q-, mod-) % mod;
return (ans+mod)%mod;///因为上面出现了-1所以可能变成负数;
} int main()
{
Prime(); int T, t = ; LL n, m; scanf("%d", &T); while(T--)
{
scanf("%lld %lld", &n, &m); LL ans = ; for(int i=; i<k && (LL)p[i]*p[i]<=n; i++)
{
if(n%p[i])continue;
LL cnt = ; while(n%p[i] == )
{
cnt ++;
n /= p[i];
} cnt = cnt*m+; LL ret = Sn(p[i], cnt); ans = ans*ret%mod;
}
if(n>)
ans = ans*Sn(n, m+)%mod; printf("Case %d: %lld\n", t++, ans);
}
return ;
}

LightOj1054 - Efficient Pseudo Code ( 求n的m次方的因子和 )的更多相关文章

  1. 1054 - Efficient Pseudo Code

    1054 - Efficient Pseudo Code    PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...

  2. Lightoj 1054 - Efficient Pseudo Code

    题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1054 题目大意: 给出n,m,问n^m的所有因子之和是多少? 解题思路: 补 ...

  3. 44. log(n)求a的n次方[power(a,n)]

    [题目] 实现函数double Power(double base, int exponent),求base的exponent次方,不需要考虑溢出. [分析] 这是一道看起来很简单的问题,很容易写出如 ...

  4. [LeetCode] Pow(x, n) 求x的n次方

    Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无 ...

  5. POJ 1845 Sumdiv (求某个数的所有正因子的和)

    题意: 求A^B的所有正因子的和,最后模9901的结果. 思路: 若对一个数n进行素数分解,n=p1^a1*p2^a2*p3^a3*...*pk^ak那么n的所有正因子之和sum=(1+p1+...+ ...

  6. C语言求x的y次方,自定义函数,自己的算法

    我是一名高二中学生,初中时接触电脑,非常酷爱电脑技术,自己百度学习了有两年多了,编程语言也零零散散的学习了一点,想在大学学习计算机专业,所以现在准备系统的学习C语言,并在博客中与大家分享我学习中的心得 ...

  7. 50 Pow(x, n)(求x的n次方Medium)

    题目意思:x为double,n为int,求x的n次方 思路分析:直接求,注意临界条件 class Solution { public: double myPow(double x, int n) { ...

  8. [华为机试练习题]50.求M的N次方的最后三位

    题目 描写叙述: 正整数M 的N次方有可能是一个很大的数字,我们仅仅求该数字的最后三位 例1: 比方输入5和3 ,5的3次方为125.则输出为125 例2: 比方输入2和10 2的10次方为1024 ...

  9. Zoj 3529 A Game Between Alice and Bob 数论+博弈Nim 快速求数中有多少个素数因子

    本题涉及博弈论中的Nim游戏博弈. Nim游戏博弈详解链接: http://www.cnblogs.com/exponent/articles/2141477.html 本题解题报告详解链接: htt ...

随机推荐

  1. 产品原型设计工具 Balsamiq Mockups(转)

    Balsamiq Mockups是产品设计师绘制线框图或产品原型界面的利器.在产品设计的需求阶段,低保真的线框图或者草图设计介于产品流程设计与高保真DEMO设计之间,在Balsamiq Mockups ...

  2. ios 开发中出现的 pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug

    主要原因是某部分内存释放的太频繁,解决方法是检查函数的中[xxx release]; 将其注释掉 就行了

  3. jQuery 跨域访问问题解决方法(转)

    转自:http://www.jb51.net/article/21213.htm 浏览器端跨域访问一直是个问题, 多数研发人员对待js的态度都是好了伤疤忘了疼,所以病发的时候,时不时地都要疼上一疼.记 ...

  4. CentOS Git的还原和操作

    $ git log --graph --oneline $ git reset --hard 版本号 用 reflog 挽救错误的重置 [jackluo@localhost demo]$ git re ...

  5. Hibernate使用MyExclipse10自动生成配置文件报错

    使用MyExclipse10自动生成hibernate映射文件如下: 结果发现启动服务时报以下错误: 原因:因为hibernate换过项目地址,所以dtd文件的地址也换掉了.在hbm.xml文件里面把 ...

  6. IOS 今天学到太多的知识了,赶快记录下来

    TabBarController 修改tabbar的背景颜色和选中时候的颜色: func application(application: UIApplication, didFinishLaunch ...

  7. react-amazeui-touch 妹子Ui移动端学习

    必须先配置并且学习react环境: http://www.cnblogs.com/CyLee/p/5668373.html 官方地址 http://t.amazeui.org/#/docs/form? ...

  8. PHPExcel 是用来操作Office Excel 文档的一个PHP类库

    PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格,如 Excel (BIFF) .xls ...

  9. 获取文本文件的第N行内容

    在PowerShell中,可以通过Get-Content这个cmdlet来获取文本文件的内容.Get-Content将一个文本文件读取到一个数组中,每一个数组元素就是文件的一行内容.比如一个文本文件内 ...

  10. UVALive 7472

    题意 有n个循环 给出x a b c xi+1=(a*x+b)%c 要求是从这些循环中各取一个数 使加和最大并且给出一个m 满足sum%m!=0 n的范围是4次方 c的范围是3次方 训练赛的时候看了一 ...