【题目3】写一个函数,求两个整数的最大公约数和最小公倍数,用主函数调用这个函数,并输出结果,两个整数由键盘输入。
提示:
由于函数要得到两个结果:最大公约数和最小公倍数,而一个函数只有一个返回值,若函数的返回值是最大公约数,则可以将表示最小公倍数的变量定义为全局变量。
【题目4】 写一个函数,判断一个正整数n是否是素数,用主函数调用这个函数,并输出结果,n的值在主函数中输入。
【题目3】写一个函数,求两个整数的最大公约数和最小公倍数,用主函数调用这个函数,并输出结果,两个整数由键盘输入。
提示:
由于函数要得到两个结果:最大公约数和最小公倍数,而一个函数只有一个返回值,若函数的返回值是最大公约数,则可以将表示最小公倍数的变量定义为全局变量。
【题目4】 写一个函数,判断一个正整数n是否是素数,用主函数调用这个函数,并输出结果,n的值在主函数中输入。
没要求语言? 给你用C语言写.你看看.
第一题:
#include <stdio.h>
int m; //全局变量,存放最小公倍数.
int gcd(int i,int j){
//该函数实现求最大公约数和最小公倍数. 最大公约数通过函数返回. 最小公倍数是全局变量
int s=i*j;
int a;
while(j!=0){
a=i%j;
i=j;
j=a;
}
m=s/i; //最小公倍数等于两数的积除以最大公约数.
return i; //返回最大公约数.
}
int main()
{
int i,j,n;
scanf("%d%d",&i,&j);
n=gcd(i,j); //掉用函数. 并将返回的值赋值给变量n
printf("最大公约数:%d\n",n);
printf("最小公倍数:%d\n",m);
return 0;
}
第二题:
#include <stdio.h>
#include <math.h>
int prime(int n) {
//该函数实现判断一个整数是不是素数. 是的话返回1. 不是返回0.
int i;
int k=sqrt(n);
for(i=2; i<=k; i++)
if( n%i==0) break;
return i>k?1:0;
}
int main()
{
int n;
printf("Input n=");
scanf("%d",&n);
if(prime(n)) //调用函数. 根据返回的值输出yes或者no.
printf("Yes\n");
else
printf("No\n");
return 0;
}
Hello, 你这两个问题都是MIT教程<构造过程抽象>中两个比较好的例子
求最大公倍数跟素数自古就有很多数学家探索最佳的算法
1.关于最大公倍数的算法是欧几里德算法
我就用Lisp写一写这个算法
(define (gcd a b)
(if (= b 0)
a
(gcd b (remainder a b))))
比如你想检测206,40这两个数的最大公约数
输入(gcd 206 40)
2.关于求素数,最著名的是费马检查.
(define (expmod base exp m)
(cond (( = exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))