作业帮 > 综合 > 作业

最大公约数和最小公倍数问题pascal最优

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/10/04 09:34:42
最大公约数和最小公倍数问题pascal最优
输入二个正整数x0,y0(2
最大公约数和最小公倍数问题pascal最优
先最小公倍数y0除以最大公约数x0得到一个新数a,
求出把a分解为a=p1*q1=p2*q2=p3*q3=……=pn*qn的形式(其中p1,q1皆为整数,且p1,q1互质p2,q2……等类似)
则对应的p,q为
p=p1*x0=p2*x0=p3*x0=……
q=q1*x0=q2*x0=q3*x0=……
优化:
此题只需要知道有多少种不同的方式
所以可以对
a分解质因数
a=m1^a2*m2^a2*m3^a3*……
如a=700分解为
a=2^2*5^2*7^1
那么p1和p2互质就成为
将这些分解出来的质因数m“给”p1还是p2的问题了(“给”要不都给,要不不给一个,例如700有两个2的质因子,此时要不将2全部分给p1,要一个都不给,因为p1,p2需要互质,如果一个p1,p2一人一个2,则必不互质)
对于一个质因数m[i],只有两种选择,给p1,给p2,而定下m[i]后,m[i+1]后就有两种选择,所以如果a有n个不同的质因数,则用答案是2^n.
所以只要判断a有多少不同的质因数.所以……
代码等下给,我先喝口水来,你先理解理解.

再问: thankyou,我也先缓会儿。。。。
再答: var x0,y0,n,divs:longint;
begin
     read(x0,y0);
     x0:=y0 div x0;
     if (x0=1) then begin
        writeln(1);
        exit;
     end;
     divs:=2; n:=0;
     if (x0>1) then begin
        if (x0 mod divs=0) then begin
           n:=n+1;
           while (x0 mod divs=0) do
                 x0:=x0 div divs;
        end;
     end;
     divs:=3;
     while (x0>1) do begin
        if (x0 mod divs=0) then begin
           n:=n+1;
           while (x0 mod divs=0) do
                 x0:=x0 div divs;
        end;
        divs:=divs+2;
     end;
     x0:=1 shl n;
     writeln(x0);
end.应当没有错误。

再问: 额,还是80分。不知道是哪里出错了,好像第四个点错了。
再答: 原题地址我去看一下
再问: wikioi网站里面的题目。。。
再答: 复制浏览器上方地址栏的地址,直接发地址
再问: http://www.wikioi.com/
再答: 大哥,那道题目的地址,不是那个网站