Rust语言编程例子 第016题:最大公约数
Rust语言编程题目:给定两个正整数m=128和n=60,求其最大公约数和最小公倍数。
程序分析:
(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
(2)求最大公约数用辗转相除法(又名欧几里德算法)
1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。
2)算法描述:
第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。
输出格式:第一行输出最大公约数,第二行输出最小公倍数。
知识点:循环
fn main() { let m = 128; let n = 60; let mut temp_m = m; let mut temp_n = n; let mut temp_mod = temp_m % temp_n; while temp_mod != 0 { temp_m = temp_n; temp_n = temp_mod; temp_mod = temp_m % temp_n; } println!("{} 和 {} 的最大公约数是 {}", m, n, temp_n); println!("{} 和 {} 的最小公倍数是 {}", m, n, m * n / temp_n); }
程序执行结果:
128 和 60 的最大公约数是 4 128 和 60 的最小公倍数是 1920 Process finished with exit code 0
Rust语言编程题目:在控制台随便输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析:可以通过> < 比较判断当前的字符属于什么类型的字符。注入从控制台输入后的 ...