sicily 2501. 算算式
2015-11-19 14:38
323 查看
2501. 算算式
Constraints
Time Limit: 1 secs, Memory Limit: 256 MBDescription
_gXX遇到一个麻烦的式子:S = n1 + n2 + n3 + ...... + nk,已知n、k,求S的值。
因为_gXX数学很差,希望你能告诉他答案。但是由于他的数学实在太差了,所以你只需要告诉他S除以9901的余数即可。
Input
两个整数,n和k(n ≤ 1000 , k ≤ 109)。Output
一个数,表示S除以9901的余数。Sample Input
2 3
Sample Output
14
题目分析
数论题
第一是同余定理
a+b≡x+m (mod d),其中 a≡x (mod d),b≡m(mod d)
即(x+m)%d = (x%d + m%d) %d
a-b≡x-m (mod d) 其中 a≡x (mod d),b≡m (mod d)
a*b≡x*m (mod d ) 其中a≡x (mod d),b≡m (mod d)
第二是应用了费马小定理
百科解释为:假如p是质数,且(a,p)=1,那么 a(p-1)≡1(mod p)。
即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
应用到这一题就是p=9901为质数
则n^(9900+k) % 9901 = (n^9900%9901 * n^k)%9901 = (1 * n^k) % 9901 = n^k % 9901;
即每9900个数为一个循环
第三应用等比公式的求和
n^1 + n^2 +...+ n^9900 = n*(1-n^9900)/(1-n)
左右对9901求模,右边应用同余定理,注意到1-n^9900对9901求模为0
所以最终结果为0
即此题
(n^1 + n^2 +...+ n^k) % 9901 = (n^1 + n^2 +...+ n^(k%9900)) % 9901
第四为了加快计算,
n^1 + n^2 +..+ n^k = n(1+(n..n(1+n)..))再用同余公式
#include <stdio.h>
const int p = 9901;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int temp = 0;
int times = k % 9900;
for (int c = 1; c <= times; ++c)
temp = n * (1 + temp) % p;
printf("%d\n", temp);
return 0;
}
相关文章推荐
- java单例模式的7种写法
- 线程的两种创建方式
- hibernate入门(一)
- 为什么Excel创建一个新的工作簿就会初始化三个worksheet
- Linux设备驱动之mmap设备操作
- 参数 of jQuery.ajax()
- linux非专业常用命令
- org.hibernate.QueryException: could not resolve property
- MyEclipse8.5 + jdk 1.6.0_43 + tomcat6 + maven 3.0.4 + win7 32位 ,环境搭建并看到“hello world”
- OS X 10.11 安装Cocoapods
- Android音频系统之音频框架
- JBPM4 常用表结构详解,转自:http://blog.csdn.net/liulgcq/article/details/7205950
- Flume + HDFS Sink采集数据及如何添加第三方JAR
- retrofit2.0转换String 报错修复
- 看到C上这么多努力的大神有感
- swif自学笔记(二)
- [Leetcode]Search a 2D Matrix II
- block的简单回调传值
- Servlet:JSP理解
- linker command failed with exit code 1