pascal~~~读程序的题~~~~~

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:15:38
program project21;
const
maxn=10000;
var
i,j,k,n,r,p,g:longint;
a:array[1..maxn] of longint;

function gcd(m,n:longint):longint;
var
r:longint;
begin
while n<>0 do
begin
r:=m mod n;
m:=n;
n:=r;
end;
gcd:=m
end;

begin
n:=1000;
r:=202;
for i:=1 to n-r do a[i]:=n-i+1;
for i:=2 to r do
begin
k:=i;
for j:=1 to n-r do
if gcd(k,a[ j ])>1
then begin
g:=gcd(k,a[j] );
k:=k div g;
a[j]:=a[j] div g;
if k=1 then break
end
end;
p:=1;g:=0;
for i:=1 to n-r do
begin
p:=p*a[i];
while p mod 5=0 do
begin
p:=p div 5;
g:=g+1
end;
p:=p mod 5
end;
writeln(g)
end.

问问各位高手有没有简便的方法~~~
请写大致过程~~~

ls不要误人子弟。。什么没办法。。
信息奥赛的初赛对数学底子要求比较高,如果要在初赛获得高分一般数学都不能差~~
所以,如果lz想提高初赛成绩,建议除了加强计算机基础知识外,需要多学习一些组合数学和递归函数的知识。
lz出的这道题是这样子的:
C表示组合,程序是求1000C202对5的对数的下整,也就是[log(1000C202)/(log5)]
这个程序是利用模拟约分的方式进行这个计算的。
首先先计算1000!/(202!*798!)的所有因数,然后对每个因数都不断的div 5,也就是在计算是5的几次方,并把余数和下一个因数相乘作为下一次循环的底数,如此循环便可以完成[log(1000C202)/(log5)]的计算

这东西没办法,看你的理解和平时的熟练度了,没什么好教的....

我觉得这_不_是_马_甲说得很对。功在平时,确实要看你的理解,我也是学习pascal的,确实没法教。(二楼莫要攻击,二楼这么有能力,怎么不贴程序?)
当然,要学编程,楼主确实需要数学好。我提醒一下,要多用函数,高精度。
对于多余的无用物,例如maxn根本就不需要,只要[1..10000]就行,便节省两行。