用freepascal做求兩個正整數的最大公約數

2021-12-23 14:40:08 字數 5575 閱讀 5878

1樓:老子是張餅

1、聽說這題用輾轉相除法很好,不過我不會。

varx,y,i:integer;

begin

readln(x,y);

for i:=x downto 1 do

if y mod i=0 then

begin

writeln(i);

break;

end;

readln;

end.

2、硬找

varn,i,k:integer;

begin

readln(n);

for i:=1 to trunc(sqrt(n)) doif n mod i=0 then

inc(k);

k:=k*2;

if trunc(sqrt(n))=sqrt(n) thendec(k);

writeln(k);

end.

3、這題簡單但是很麻煩。首先要知道2023年1月1日是星期一。……

2樓:

【題目】求兩個正整數的最大公約數

【演算法】用輾轉相除法 (參看p40例3)

【參考程式】

var m,n,r,t:integer;

begin

writeln('input m,n');

readln(m,n);

if (n<=0) or (m<=0) then begin writeln('error!');halt;end;

if m0 do begin

m:=n;

【問題】任給一個自然數n,求出這個自然數不同因數的個數。

例如 n=6時,因為1,2,3,6這四個數均是6的因數,故輸出為total=4。

【演算法】類似判斷素數的方法。

如果發現n有一個≤sqr(n)的因數,必然同時有一個≥sqr(n)的因數。

例如:6有一個因數2,則必有另一因數3。因為2*3=6

【參考程式】

var n,nums,k,i:longint;

begin

repeat

writeln('input n:');

readln(n);

if n<=0 then writeln('n>0!!');

until n>0;

k:=trunc(sqrt(n));

nums:=2;

for i:=2 to k do

if n mod i=0 then nums:=nums+2;

if n=sqr(k) then dec(nums);

writeln('nums:',nums);

end.

【題目】輸入年、月、日,求這一天是星期幾。

【參考程式1】

【演算法提要】求出這一天離公元1年的元旦有多少天days,然後對7求餘

const

first=1;

first_week=1;

yue:array[1..12] of 1..31=(31,28,31,30,31,30,31,31,30,31,30,31);

week_:array[0..6] of string[20] =('sunday','monday','tuesday','wedsday',

'thursday','friday','saturday');

vardays,week,year,month,date,i,years:longint;

begin

writeln('year:');readln(year);

writeln('month');readln(month);

writeln('date');readln(date);

years:=0; days:=0;

for i:=first to year-1 do

if (i mod 400=0) or (i mod 4=0) and (i mod 100<>0) then

begin years:=years+1;end;

days:=(year-first)*365+years;

for i:=1 to month-1 do days:=days+yue[i];

for i:=1 to date do days:=days+1;

if ((year mod 400=0) or (year mod 4=0) and (year mod 100<>0))

and (month>3) then days:=days+1;

week:=((days-1) mod 7 +first_week ) mod 7;

writeln('it is ',week_[week]);

readln;

end.

【參考程式2】 用公式法: days:=trunc((year-1)*(1+1/4-1/100+1/400)+c)

用求出的days對7求餘數。其中c為該天離該年元旦的天數

const

first=1;

first_week=1;

yue:array[1..12] of 1..31=(31,28,31,30,31,30,31,31,30,31,30,31);

week_:array[0..6] of string[20] =('sunday','monday','tuesday','wedsday',

'thursday','friday','saturday');

vardays,week,year,month,date,i:longint;

begin

writeln('year:');readln(year);

writeln('month');readln(month);

writeln('date');readln(date);

days:=0;

for i:=1 to month-1 do days:=days+yue[i];

for i:=1 to date do days:=days+1;

if ((year mod 400=0) or (year mod 4=0) and (year mod 100<>0))

and (month>3) then days:=days+1;

days:=trunc((year-1)*(1+1/4-1/100+1/400)+days);

week:=days mod 7;

writeln('it is ',week_[week]);

readln;

end.

pascal 輸入兩個正整數,,求最大公約數值和最小公倍數。

3樓:新超級賽亞人

最大公約數:

function zdgys(a,b:integer):integer;

begin

if a mod b=0 then zdgys:=belse zdgys:=zdgys(b,a mod b);

end;

vara,b:integer;

begin

readln(a,b);

writeln(zdgys(a,b));

end.

最小公倍數

vara,b,t:integer;

begin

readln(a,b);

if awhile a mod b <>0 do a:=a+1;

writeln(a);

end.

4樓:水疏奈雅

題目不清楚,問問老師,老師會告訴你的

pascal求最大公約數

5樓:遊海穎

求兩個整數的最大公約數(輾轉相除法)

程式如下:

varm , n : integer;

function fac(i, j:integer):integer;

begin

if j=0 then begin fac:=i;exit;end;

fac:=fac(j ,i mod j);

end;

begin

readln(n, m);

writeln(fac(n,m));

end.

或var

a,b:integer;

procedure qw(a,b:integer);

varv:integer;

begin

if a mod b=0 then writeln(b)else if b mod a=0 then writeln(a)else

begin

v:=a;

a:=a mod b;

b:=b mod v;

qw(a,b);

end;

end;

begin

readln(a,b);

qw(a,b);

readln;

end.

6樓:

把第3行的1..n改為1..10(要一個定值,在var下的都是變數,他會認為你的陣列相當的大,超過了計算機能處理的範圍)

pascal輸入n個正整數求它們的最大公約數。快!

7樓:匿名使用者

var ans,n,r,i,t:longint;

function work(a,b:longint):longint;

begin

if a mod b=0 then work:=belse work:=work(b,a mod b);

end;

begin

readln(n);

read(ans);

for i:=2 to n do

begin

read(r);

if r

ans:=work(r,ans);

end;

writeln(ans);

end.

c語言程式設計:輸入兩個正整數m和n,求它們的最大公約數。

8樓:超級

#include

void main()

c = a % b;

}printf("最大公約數:%d", b);

} // 輸入 20 60;輸出 20

9樓:註冊註冊冊

main()

a=num1,b=num2;

while(b!=0)/*輾轉取餘演算法*/printf("它們的最大公約數為:%d\n",a);

printf("它們的最小公倍數為:%d\n",num1*num2/a);/*兩數相乘除最大公約數就是最小公倍數*/}

10樓:匿名使用者

比較簡單的做法

#include "stdio.h"

void main()

11樓:四方袁走

#include

int main()

return 0;}

用兩個電機做發電機,怎麼做?用兩個馬達發電

這是另類永動機設想 多少年來都有人在不懈地努力 但至近成效不大 有人在高真空裡將兩個電機同軸相饋 能轉一會 據說韓國人搞的廷神 你可到網上查一下 這做為一個設想是不錯 但實際問題還是無法解決 常規下不存在1 1的功率轉換 我們去不掉無功損耗 除非在超導實驗室裡 但那並無實用意義 你是想 一個電機的轉...

用兩個多麼造句,用兩個也造句

您好!童年多麼快樂,多麼自由 一個人是多麼的孤獨,多麼的冷清 多麼美麗,多麼漂亮的花啊!小明看書多麼認真,多麼仔細啊!無論前路多麼的漫長,過程多麼的艱辛,我都不會放棄並堅定地走下去 天空悠悠飄落的雪,是多麼地純潔,多麼地晶瑩剔透啊.那熊熊燃燒的火把,是多麼熱烈多麼令人心潮澎湃.春天是多麼瑰麗的季節,...

用兩個又造句,用兩個又字造句

我有一個又大又紅的蘋果 一天由十二點開始又由十二點結束 用兩個又字造句 1 孩子們又活潑又漂亮,就像春天裡的花蕾。2 姐姐經常穿一件米色的外套,顯得又樸素又大方。3 巴兒狗又搖頭又擺尾的,在主人跟前撒起嬌來。我既漂亮,又美麗,又聰明 希望我的答案能幫助到您。1 孩子們又活潑又漂亮,就像春天裡的花蕾。...