原题目: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,如果直接求幂会炸……
你需要快速幂~
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.
再次声明: