A sequence of numbers

                                                            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768
K (Java/Others)

                                                                                        Total Submission(s): 4874    Accepted Submission(s): 1543

->Link<-

题意:给出一个数列(等差或等比)的前三项,求第K项对200907取余;

先来复习一下数列通项公式:

等差数列通项公式:An=a1+(n-1)d;n>=1;d为公差;

等比数列通项公式:An=a1*q^(n-1);q为公比;

虽然这公式有条件限制,但题目说了数列非递减;说明题目并没有那么叼,一般的公式就行;

同余定理:

同余这个概念最初是由德国数学家高斯发明的。同余的定义是这样的:
 两个整数,a,b,如果他们同时除以一个自然数m,所得的余数相同,则称a,b对于模m同余。。记作a≡b(mod.m)。读作:a同余于b模m。  同余的性质也比较多,主要有以下一些:

1.对于同一个除数,两个数之和(或差)与它们的余数之和(或差)同余。

2.对于同一个除数,两个数的乘积与它们余数的乘积同余。

3.对于同一个除数,如果有两个整数同余,那么它们的差就一  定能被这个除数整除。

4.对于同一个除数,如果两个数同余,那么他们的乘方仍然同余。

思路:分两种情况考虑,等差或等比,如果是等比的话用快速幂取模做很快即好,但等差的时候怎么取余呢?

原来同余定理有:(a+b)%c=(a%c+b%c)%c;

推导:a=k1*c+a%c,b=k2*c+b%c;(a+b)%c=((k1*c+a%c)+(k2*c+b%c)%c)%c即上述所示;

这样等差也好做了;

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MOD 200907
ll a,b,c,k;
ll fun(ll a,ll b)//快速幂取模;
{
ll x=1;
while(b)
{
if(b&1)
x=x*(a%MOD)%MOD;
a=(a*a)%MOD;
b=b>>1;
}
return x;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll sum;
scanf("%lld%lld%lld%lld",&a,&b,&c,&k);
if(2*b==a+c)//等差;
{
ll x=b-a;
sum=(a%MOD+(((k-1)%MOD)*(x%MOD)))%MOD;
}
else
{
ll x=b/a;
sum=(a%MOD)*(fun(x,k-1)%MOD)%MOD;
}
printf("%lld\n",sum);
}
return 0;
}

关键是这个同余定理!!!

HDU-2817,同余定理+快速幂取模,水过~的更多相关文章

  1. hdu 1097 A hard puzzle 快速幂取模

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1097 分析:简单题,快速幂取模, 由于只要求输出最后一位,所以开始就可以直接mod10. /*A ha ...

  2. 题解报告:hdu 1061 Rightmost Digit(快速幂取模)

    Problem Description Given a positive integer N, you should output the most right digit of N^N. Input ...

  3. HDU 1061 Rightmost Digit (快速幂取模)

    题意:给定一个数,求n^n的个位数. 析:很简单么,不就是快速幂么,取余10,所以不用说了,如果不会快速幂,这个题肯定是周期的, 找一下就OK了. 代码如下: #include <iostrea ...

  4. hdu 4704(费马小定理+快速幂取模)

    Sum                                                                                Time Limit: 2000/ ...

  5. 【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies

    G. Give Candies There are N children in kindergarten. Miss Li bought them N candies. To make the pro ...

  6. 【2018 ICPC焦作网络赛 G】Give Candies(费马小定理+快速幂取模)

    There are N children in kindergarten. Miss Li bought them N candies. To make the process more intere ...

  7. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  8. HDU 1061 Rightmost Digit --- 快速幂取模

    HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...

  9. 杭电 2817 A sequence of numbers【快速幂取模】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2817 解题思路:arithmetic or geometric sequences 是等差数列和等比数 ...

随机推荐

  1. stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram

    题目传送门 /* 题意:宽度为1,高度不等,求最大矩形面积 stack(数组模拟):对于每个a[i]有L[i],R[i]坐标位置 表示a[L[i]] < a[i] < a[R[i]] 的极 ...

  2. 题解报告:poj 3320 Jessica's Reading Problem(尺取法)

    Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...

  3. java 字符串截取的几种方式

    1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...

  4. easy ui diglog 点击关闭,触发事件

    $('#dialogDiv').dialog({ onClose:function(){ alert('11111111') ; }});

  5. Jmeter+Jenkins+Ant自动化集成环境搭建

    搭建环境: JDK:jdk1.8.0_92 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins:jenkins-2.19.3 具体环境配置 1 ...

  6. ASP.Net 控件

    简单控件 Label -作用是显示文字,编译后元素是Span 1.文本类 边框: BorderColor 边框颜色 BordersTyle 边框样式 BorderWidth 边框粗细 Literal- ...

  7. Spark学习之基于MLlib的机器学习

    Spark学习之基于MLlib的机器学习 1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定. 2. MLlib完成文本分类任 ...

  8. 在JAVA中封装JSONUtils工具类及使用 (转)

    import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util. ...

  9. wps 图片代码 复制 粘贴

    <table><tr><td><img src="C:\Users\Administrator\Desktop\QQ截图20160921180946 ...

  10. codeforces_1066_B.Heaters

    题意:一个数组只含有0或1,1表示该元素可以覆盖其自身.左边r-1个元素和右边r-1个元素,问最少保留多少个1元素可以覆盖整个数组. 思路:一个指针指向当前未被覆盖的最左边的元素下标,每次找离它最远且 ...