(每日一练72226)题目名称:勾股定理困难版

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-06-19 16:56:24

给定斜边z的值,求所有直角边x和y的组合数(x、y和z都是正整数)。

仅有一行输入,即斜边z的值(z是正整数,且z<10000000000000000000)

输出x和y的组合数(x和y是正整数)

嗯,本来想抄答案的,结果最近小伙伴们要么没有AC,要么没有代码,最可恶的是问哥,放出来一堆数学公式,欺负人呢。

算了,老顾执着的根据这个数学公式,弄了个 AC 出来,到底对不对,老顾也不知道。

于是就写了一堆代码

z = int(input())
def gcd(x,y):
    x1 = zyinzi(x)
    y1 = zyinzi(y)
    u = set(x1) & set(y1)
    r = 1
    for n in u:
        r *= n ** min(x1.count(n),y1.count(n))
    return r
def zyinzi(n):
    r = []
    c = 2
    while n > 1:
        while n % c == 0:
            r.append(c)
            n //= c
        c += 1
    return r
def dfs(arr,n):
    if len(arr) == 0:
        return
    for i,v in enumerate(arr):
        nxt = n * v
        y3.add(nxt)
        dfs(arr[i + 1:],nxt)
y1 = [1] + zyinzi(2 * z)
y3 = set()
dfs(y1,1)
y3 = sorted(y3)
t = 0
for v in y3:
    n =  (2 * z / v) ** .5
    for i in range(1,int(n) + 1):
        y = (2 * z / v - i ** 2) ** .5
        if y == int(y) and y != i and y > 0 and gcd(i,y) == 1:
            t += 1

print(t // 2)

写完了尝试了一下,妈耶,居然AC了

img

...全文
373 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧