题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1852

题目大意:

求2008^n的所有因子和m对k取余,然后求2008^m对k取余。

解题思路:

首先将2008因式分解,2008 = 2^3 * 251

所以2008^n = 2^(3n) * 251^(n)

因子和m =(2^(3n+1)- 1) * (251^(n+1) - 1)/ 250

m需要对k取余数。由于余数k和250可能不互质,也就是没有逆元存在,那么需要用到通用公式:

所以可以用快速幂求出(2^(3n+1)- 1) mod k

再求出(251^(n+1) - 1)mod (250 * k) / 250

两者相乘再对k求余数作为2008的指数

最后快速幂求出答案

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll pow(ll a, ll b, ll m)
{
ll ans = ;
a %= m;
while(b)
{
if(b & )ans = ans * a % m;
b /= ;
a *= a;
a %= m;
}
return ans;
}
int main()
{
ll n, k;
while(cin >> n >> k && n)
{
ll a = pow(, * n + , k) - ;
ll b = (pow(, n + , * k) - ) % ( * k);
b /= ;
cout<<pow(, (a * b) % k, k)<<endl;//此处必须a*b需要先对k取余数,题目求的是因子和m对k取余数作为指数的值
}
return ;
}

最新文章

  1. 3.C#面向对象基础聊天机器人
  2. JS重载
  3. 我的Sharepoint表单使用
  4. 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
  5. Windows Azure Mangement API 之 更方便的使用Mangement API
  6. XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装Xcode4.6.3(有图有真相)
  7. 手机连接wifi自动弹窗的原理及其实现方案
  8. Pascal 语言中二维数组:矩阵问题
  9. JavaScript学习总结【4】、JS深入
  10. Reapter 添加删除按钮
  11. Java串口通信详细解释
  12. kettle新建资源库(4)
  13. angr进阶(6)绕过反调试
  14. element-ui
  15. windws 下 sublime Text 3 &#183;安装的安装与激活
  16. pycharm(Tip of Day)
  17. 轮询、中断、DMA和通道
  18. EF、Repository、Factory、Service间关系
  19. iOS开发多线程篇—GCD简介
  20. 软件测试——Peer Review(简介)

热门文章

  1. 使用kafka bin目录中的zookeeper-shell.sh来查看kafka在zookeeper中的配置
  2. vue 权限管理深度探究
  3. ubuntu下安装vue-cli框架
  4. JavaScript设计模式(二) - 单例模式
  5. [转]how to use both JDK 7 and JDK 8 in one build
  6. ife task0003学习笔记(二):JavaScript原型
  7. js经验点滴js apply/call/caller/callee/bind使用方法与区别分析
  8. asp.net MVC3之AJAX实现(json)
  9. node.js之forEach
  10. 编程进阶:Java小白的序列化Serializable接口