姜培琳和老公图片:2005年第11届信息学奥林匹克pascal普及组试题求助

来源:百度文库 编辑:神马品牌网 时间:2024/04/20 01:13:00
循环(circle.pas):
例:2^1=2; 2^2=4; 2^3=8; 2^4=16; 2^5=32;
所以2的末1位的整次幂循环次数是4次 (2,4,8,6);
输入一个正整数N(1<=N<=10^100),输入一个正整数K(1<=K<=100),求N的末K位的整次幂循环次数;
清华出的题目是很难,我只有这道题做不出,别的都做出了

program circle;
const
max_k = 100;
type
TLarge = array[0..max_k-1] of integer;
var
k,i:integer;
n_str:string;
n,t,p,p_new,r,r_new:TLarge;
s:set of 0..9;

function set_large(var a:TLarge; s:string):boolean;
var
i,count:integer;
first:boolean;
begin
result := false;
count := 0;
first := true;
for i := length(s) downto 1 do
if ((not first) or (s[i] <> ' ')) then
begin
first := false;
a[count] := ord(s[i]) - ord('0');
if (a[count] < 0) or (a[count] > 9) then
exit;
inc(count);
if (count = k) then
break;
end;
for count := count to k-1 do
a[count] := 0;
result := true;
end;

procedure print_large(var a:TLarge);
var
first:boolean;
i:integer;
begin
first := true;
for i := k-1 downto 0 do
if (not first) or (a[i] <> 0) then
begin
first := false;
write(a[i]);
end;
if (first) then
write('0');
writeln;
end;

procedure adjust_large(var a:TLarge);
var
i,r,t:integer;
begin
r := 0;
for i := 0 to k-1 do
begin
t := r + a[i];
a[i] := t mod 10;
r := t div 10;
end;
end;

procedure add_large(var a,b:TLarge);
var
i:integer;
begin
for i := 0 to k-1 do
inc(a[i],b[i]);
adjust_large( a );
end;

procedure multi_large(var a,b:TLarge);
var
c:TLarge;
i,j:integer;
begin
set_large(c,'0');
for i := 0 to k-1 do
for j := 0 to i do
inc(c[i],a[j]*b[i-j]);
adjust_large( c );
a := c;
end;

begin
write('input N: ');
readln(n_str);
write('input K: ');
readln( k );
if (not set_large(n,n_str)) then
exit;

set_large(r,'1');
p := n;
for i := 0 to k-1 do
begin
t := n;
set_large(p_new,'1');
set_large(r_new,'0');
s := [];
while (not (t[i] in s)) do
begin
s := s + [t[i]];
multi_large(t,p);
multi_large(p_new,p);
add_large(r_new,r);
end;
if (t[i] <> n[i]) then
begin set_large(r,'0'); break end;
r := r_new;
p := p_new;
end;

print_large( r );

readln;
end.

比较简单得,我觉得用递推
先看最后一位,如果最后一位就不对就退出
还有看后两位,我试过可能会死循环,这时也退出,你好好想想吧!如果要程序的话留言,祝你成功!
楼上的有问题的。。

great_wh - 魔法师 四级 的set of 0..9定义是什么意思???

我知写了解题报告,没写程序。用欧拉函数和欧拉定理。

我考,真是太难了

真难