北京航空航天大学2014第五次上机解题报告

2014第五次上机解题报告

                                                                                                   --------by14211065于济凡

 

 

 

写在前面:

           上机题目有时候是长时间的训练,有时候是一瞬间的灵感,所以,不用过于在意结果,毕竟,我们的目的都在于增长自己的能力,都在于成长。

 

 

 

 

第一题:jhljx学gcd

ProblemDescription

大家都知道gcd是最大公约数的意思。jhljx准备开始学习gcd了。他想要求出n个数的最大公约数gcd和最小公倍数lcm。请你帮帮他。

Input

输入多组数据。
每组数据两行,第一行为一个正整数n,表示有多少个数(2<=n<=20)。
第二行有n个正整数,每个数之间用空格隔开。

Output

输出这n个数共同的最大公约数和最小公倍数(保证结果在int范围内)。

SampleInput

2
9 15
3
24 60 18

SampleOutput

345
6 360

如果只是单纯地比较和计算两个数之间的最大公约数和最小公倍数,那对于已经学习了函数和递归的同学们来说并不是什么难题,但是计算多个数的最大公约数和最小公倍数可能对于一些同学就有些难度了,那我们不妨现在先来复习下三个最大公约数和最小公倍数的求法。

比如:24,60,18

求最大公约数可以采取先求2460的最大公约数,然后再求这个公约数1218的最大公约数,得到6

求最小公倍数可以采取先求2460的最小公倍数120,再求12018的最小公倍数,得到180.

由此可见:我们求多个数的最大公约数与最小公倍数时,可以采用先求前两个数的最大公约数,再不断用这个数的公约数与下一个数求公约数,直到结束,最小公倍数同理。

于是,代码如下:

#include<iostream>

 

using namespace std;

int gcd(int m,int n)

{

    int r;

    r=m%n;

    if(r==0)

        return n;

    else

        return gcd(n,r);

}

 

int lcm(int p,int q)

{

    return p*q/gcd(p,q);

}

 

int main()

{

    int counter;

    int x,y,z,x1,y1,z1;

    int gcdx,lcmx;

    while(cin>>counter)

    {

        cin>>x>>y;

        x1=x;

        y1=y;

        gcdx=gcd(x,y);

        lcmx=lcm(x1,y1);

       for;counter>=3;counter--)

        {

            cin>>y;

            y1=y;

            x=gcdx;

            gcdx=gcd(x,y);

            x1=lcmx;

            lcmx=lcm(x1,y1);

        }

       cout<<gcdx<<" "<<lcmx<<endl;

    }

}

 

第二题:jhljx学素数

ProblemDescription

函数是一个重要的知识点。jhljx一改丧心病狂的风格,来点小清新。
他让你用函数实现判断一个数是否为素数。

Input

输入多组数据。
输入一个非负整数n。(保证n在long long范围内,但不会很大)

Output

如果这个数是素数,输出"jhljx isgood!",否则输出"jhljxis sangxinbingkuang!"。

SampleInput

1
2

SampleOutput

jhljxis sangxinbingkuang!
jhljx is good!

Hint

本题会检查代码,不用函数实现的一律0分。
本题是课本原题,见课本2146.29

 

首先,这道题的确是书后的原题,第二呢,没做也没关系,毕竟我们的第一次练习赛也曾经做过类似的素数判断(2014级第一次练习E)。

不过这个题目还有一点,那就是要求用函数实现

         那么具体如何实现呢?

         判断一个数n是不是素数,只需要判断从1开始,一直到根号下n,只要没有除了1之外的数能够被整除即可(为什么不是一直到n呢?因为怕超时间)

         所以规避了超时的陷阱之后,这道题可能就基本做出来了。

#include<cstdio>

#include<cmath>

#include<iostream>

using namespace std;

 

int sushu(long long x)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值