poj3734--pascal题解
2017-05-02 17:15
190 查看
原题目:http://poj.org/problem?id=3734
但如果手动多试几组数据呢?
多试一下会得到如下结果:
读入 n : —1—2—3—4—5……
输出 ans :-2—6–20–72–272……
而 2=1*2,6=2*3,20=4*5,72=8*9,272=16*17……
每个式子提取较小的因数,则会得到:1,2,4,8,16……
分别是2的0、1、2、3、4……次方,
所以结果也就出来了:
好的结束……才没有。
本题n的范围是1<=n<=10^9,如果直接求幂会炸……
你需要快速幂~
再次声明:
请自行百度快速幂
这题只有两个样例,乍一看也看不出什么来……但如果手动多试几组数据呢?
多试一下会得到如下结果:
读入 n : —1—2—3—4—5……
输出 ans :-2—6–20–72–272……
而 2=1*2,6=2*3,20=4*5,72=8*9,272=16*17……
每个式子提取较小的因数,则会得到:1,2,4,8,16……
分别是2的0、1、2、3、4……次方,
所以结果也就出来了:
好的结束……才没有。
本题n的范围是1<=n<=10^9,如果直接求幂会炸……
你需要快速幂~
var t,i,l,n,j:longint; a,b:array[0..31]of longint; begin a[0]:=1;b[0]:=2; for i:=1 to 30 do begin a[i]:=a[i-1]*2; b[i]:=b[i-1]*b[i-1]mod 10007; end; readln(t); for i:=1 to t do begin readln(n);l:=1;n:=n-1; for j:=30 downto 0 do if a[j]<=n then begin l:=l*b[j]mod 10007; n:=n-a[j]; if n=0 then break; end; l:=(l*(l+1))mod 10007; writeln(l); end; end.
再次声明:
请自行百度快速幂
相关文章推荐
- 笨小猴pascal题解
- 题解:Pascal计算2^n次方
- 题解:Pascal数字统计
- Yemaster摘苹果题解 Pascal
- 级数求和ACC程序加题解PASCAL
- 题解:统计字符pascal
- 石头剪子布Pascal题解
- Pascal题解
- poj3905 pascal题解
- NOIP2016普及组复赛第一题ACC程序加题解pascal———买铅笔
- poj3683 pascal题解
- Pascal题解奖学金
- leetcode题解-118. Pascal's Triangle && 119. Pascal's Triangle II
- Pascal题解:摘苹果
- leetcode_题解_Pascal's Triangle_easy
- 【LeetCode】【Python题解】Pascal's Triangle
- NOIP2016普及组复赛第二题60分程序加题解pascal大神求帮忙!!!———回文日期
- Leetcode题解 118. Pascal's Triangle
- NOIP 2000 单词接龙ACC pascal程序加题解。
- NOIP2016普及组复赛第一题的ACC程序加题解pascal