python数据分析

在python的标准库math中有一个gcd函数,其功能是计算两个数的最大公约数。请编写程序,从键盘输入两个整数,调用gcd函数求这两个整数的最大公约数。
输入样例:
16
20
输出样例:
4

import math

x = int(input())
y = int(input())

print(math.gcd(x, y))

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7551800
  • 你也可以参考下这篇文章:两个正整数的最大公约数。编写求最大公约数的函数Gcd(),主函数中输入任意两个整数,调用此函数求最大公约数并输出结果。
  • 除此之外, 这篇博客: 蓝桥杯模板总结:中的 gcd求最大公约数: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    int gcd(int a,int b){
    	if(b==0) return a;
    	else return gcd(b,a%b);
    } 

    注意:两个数的乘积等于他们的最大公约数和最小公倍数的乘积。

  • 以下回答来自chatgpt:

    解决方案:

    根据题目,需要求出两个数的最大公约数,然后再根据最大公约数判断是否存在无法组成的最大整数。如果存在则用背包问题的思路求解不能凑出的数字的数量。

    代码如下:

    import math
    
    # 求最大公约数
    def gcd(a, b):
        return math.gcd(a, b)
    
    # 主要函数
    def func():
        # 输入两个数
        a, b = map(int, input().split())
        # 求最大公约数
        r = gcd(a, b)
        # 判断是否有无法组成的最大整数
        if r != 1:
            print(r)
            return
        # 背包问题求解不能凑出的数字的数量
        dp = [False] * (a * b + 1)
        dp[0] = True
        for num in [a, b]:
            for i in range(1, a * b // num + 1):
                for j in range(a * b, -1, -1):
                    if j - num * i >= 0 and dp[j - num * i]:
                        dp[j] = True
        ans = 0
        for i in range(1, a * b + 1):
            if not dp[i]:
                ans += 1
        print(ans)
    
    # 测试
    func()
    

    首先,输入两个数a和b,然后用math库中的gcd函数求出这两个数的最大公约数r。如果r不等于1,则输出r,因为此时就不存在无法组成的最大整数。如果r等于1,则可以继续进行下一步的背包问题求解。

    使用动态规划的思路,定义dp数组,dp[i]表示是否能够凑出数字i。初始状态,dp[0]=True,即数字0一定可以凑出。然后,对a和b分别进行循环,每次枚举它们的倍数,将相应的dp[i]标记为True。循环结束后,再次遍历dp数组,统计不能凑出的数字的数量ans,最后输出即可。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^