回 帖 发 新 帖 刷新版面

主题:编程求解:求2009个1997的乘积的最后两位数是多少?

如题,求2009个1997的乘积的最后两位数是多少?
我想应该不是高精度。。。

回复列表 (共8个回复)

沙发


先算1997*1997 中7和97相乘,取最后两位,重复这个工作,最后 的结果就是要求的

板凳

什么也别做,计算后两位就行了
var
        i,j,n,m,x,y:integer;
begin
        read(x,y);
        n:=x mod 100;(n:=97)//由于只计算后两位,前面的19就没有用
        for i:=1 to y(2009) do
        begin
                m:=n*n;
                m:=m mod 100;
        end;
        if m<10 then write ('0',m) else write(m);//最大的重点就在于电脑会把09(或其他小于十的数)看成9,所以在输出时如果m<10(也就是只输出1位数)时要补一个‘0’,否则不符和输出格式)
end.

如果LZ有够变态的话,高精度我也会

3 楼

89

4 楼

//水题,答案为89!
program four;
var
   i,j:longint;
begin
   j:=1;
   for i:=1 to 2009 do begin
     j:=j*2009;
     if j>=100 then j:=j-100*(j div 100);
   end;
   if j>=10 then writeln(j);
   readln;
   readln;
end.

5 楼

begin writeln(9*97 mod 100 div 10,9*97 mod 10) end.

6 楼

其实问题就是:
a|b=m1
c|b=m2
a*c|b=m1*m2|b
C++区也讨论了类似的问题,是数论的东东:)

7 楼


你的有错误吧?
  j:=j*2009?
  不应该是j:=j*1997?[em10]

8 楼

说实在的,这根本算不上合格的编程题目,只是一个数学题。数论学好一点都会做。

正如6L所说的,同余有这么一个性质:(“==”表示同余)
a==a'(mod n)
b==b'(mod n)
a*b==a'*b'(mod n)

1997==97(mod 100)
所以说,每次用97*上一次的结果,并把这个结果div 100即可。

我来回复

您尚未登录,请登录后再回复。点此登录或注册