永发信息网

计算机编程高手来啊

答案:3  悬赏:40  手机版
解决时间 2021-06-05 05:52
  • 提问者网友:欲望失宠
  • 2021-06-04 22:04

【题目3】写一个函数,求两个整数的最大公约数和最小公倍数,用主函数调用这个函数,并输出结果,两个整数由键盘输入。

提示:

由于函数要得到两个结果:最大公约数和最小公倍数,而一个函数只有一个返回值,若函数的返回值是最大公约数,则可以将表示最小公倍数的变量定义为全局变量。

【题目4】 写一个函数,判断一个正整数n是否是素数,用主函数调用这个函数,并输出结果,n的值在主函数中输入。

最佳答案
  • 五星知识达人网友:怀裏藏嬌
  • 2021-06-04 22:48

没要求语言? 给你用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;
}

全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-06-05 00:26

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))))

  • 2楼网友:第四晚心情
  • 2021-06-05 00:20
用专业的工具就能算出来的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯