精华内容
下载资源
问答
  • 则称其为勾股数元组。 请求出给定n m 范围内所有的勾股数元组 输入描述 起始范围 1<n<10000 n<m<10000 输出目描述 abc 保证a<b<c输出格式 a b c 多组勾股数元组 按照a升序b升序 c升序的排序方式...

    如果三个正整数A B C ,A²+B²=C²则为勾股数
    如果ABC之间两两互质,即A与B A与C B与C均互质没有公约数,
    则称其为勾股数元组。
    请求出给定n m 范围内所有的勾股数元组
    输入描述
    起始范围 1<n<10000    n<m<10000
    输出目描述
    abc 保证a<b<c输出格式  a b c
    多组勾股数元组 按照a升序b升序 c升序的排序方式输出。
    给定范围内,找不到勾股数元组时,输出  Na

    案例1
     输入
      1
      20
      输出
       3 4 5
       5 12 13
       8 15 17

    案例2:
      输入
        5
        10
      输出
        Na

    #include <stdio.h>
    #include <math.h>
    /*
    如果三个正整数A B C ,A²+B²=C²则为勾股数
    如果ABC之间两两互质,即A与B A与C B与C均互质没有公约数,
    则称其为勾股数元组。
    请求出给定n m 范围内所有的勾股数元组
    输入描述
    起始范围 1<n<10000    n<m<10000
    输出目描述
    abc 保证a<b<c输出格式  a b c
    多组勾股数元组 按照a升序b升序 c升序的排序方式输出。
    给定范围内,找不到勾股数元组时,输出  Na
    */
    int CheckZhishu(int x, int y)
    {
        int a, b, c;
    
        if (x > y) {
            a = x;
    		b = y;
        } else {
            a = y;
    		b = x;
        }
    
    	while ((c = a % b) != 0) {
    		a = b;
    	    b = c;
    	}
    
    	return b;
    }
    
    int CheckGcd(int x, int y)
    {
    	if (x == 0 || y == 0)
    		return 1;
    	if (x % y == 0)
    		return y;
    	else
    		return CheckGcd(y, x % y);
    
    }
    
    int GetGouguData(int n, int m)
    {
        int i;
        int j;
        int k;
        double tmp;
        long cz;
    
        for (i = n; i <= m; i++) {
            for (j = i + 1; j <= m; j++) {
                k = i * i + j * j;
                tmp = sqrt(i * i + j * j);
                long cz = (long) tmp;
                if (tmp - cz != 0) {
                    continue;
    			}
    			k = (int)tmp;
    			if (k <= m && CheckGcd(i, j) == 1 && CheckGcd(i, k) == 1 && CheckGcd(j, k) == 1) {
                    printf("%d, %d, %d\n", i, j, k);
    		    }
            }
        }
    }
    
    int main(void)
    {
        GetGouguData(1, 10000);
    	return 0;
    
    }
    

    展开全文
  • 关于素勾股数,简单来说,就是 a 2 + b 2 = c 2 且 a、b、c 互质,则称(a,b,c)为一组素勾股数 【分析】 可以通过三层循环,找到所有符合要求的数,得到其个数,不过这样当 N 大些的时候效率就比较低; 了解(素...

    题目描述
    给定正整数N, 计算出小于或等于N的素勾股数个数
    关于素勾股数,简单来说,就是 a 2 + b 2 = c 2 且 a、b、c 互质,则称(a,b,c)为一组素勾股数

    【分析】
    可以通过三层循环,找到所有符合要求的数,得到其个数,不过这样当 N 大些的时候效率就比较低;
    了解(素勾股数、毕达哥拉斯三元组等知识),可得到关于素勾股数的一个结论:
    对于一组素勾股数(a,b,c),存在 m、n 使得 a = m 2 - n 2,b = 2mn, c = m 2 + n 2,且 gcd(m,n) = 1 由此可将三层循环化为两层循环

    【实现】

    // 获取输入
    const input = 1000
    let res = 0
    // c=m^2 + n^2,又m、n都大于0,所以它们一定不超过c的开方
    const len = Math.ceil(Math.sqrt(input))
    
    for (let i = 1; i < len; i++) {
        for (let j = i + 1; j < len; j++) {
        	// m、n不互质,跳过
        	if(isCoprime(i, j) !== 1) continue
        	
            let a = Math.pow(j, 2) - Math.pow(i, 2)
            let b = 2 * i * j
            let c = Math.pow(j, 2) + Math.pow(i, 2)
            if (c <= input) {
            	// 当前勾股数数不超过给定值
                if ((isCoprime(a, b) === 1) && (isCoprime(a, c) === 1) && (isCoprime(b, c) === 1)) {
                	// 勾股数两两互质
                    res++
                }
            }
        }
    }
    
    // 判断两个数是否互质:最大公因数是否为1
    function isCoprime(x, y) {
        // 不必考虑 x、y 的大小 第一次递归之后大的总会在前面
        if (y === 0) {
            return x
        } else {
            return isCoprime(y, x % y)
        }
    }
    
    // 输出
    console.log(res);
    
    展开全文
  • 本文实例讲述了Python实现获取前100组勾股数的方法。分享给大家供大家参考,具体如下:本来想采用穷举试探的方式来做这个算法,后来发现还是有点麻烦。从网络上找来了一种求解方法如下:当a为大于1的奇数2n+1时,b=...

    本文实例讲述了Python实现获取前100组勾股数的方法。分享给大家供大家参考,具体如下:

    本来想采用穷举试探的方式来做这个算法,后来发现还是有点麻烦。从网络上找来了一种求解方法如下:

    当a为大于1的奇数2n+1时,b=2n^2+2n,c=2n^2+2n+1。实际上就是把a的平方数拆成两个连续自然数。

    编写代码如下:

    #!/usr/bin/python

    for n in range(1,101):

    a = 2 * n +1

    b = 2 * (n** 2) + 2 * n

    c = b + 1

    # check theresult

    if a ** 2 +b ** 2 == c ** 2:

    print("a= %d, b = %d, c = %d" %(a,b,c))

    程序执行结果:

    a = 3, b = 4, c = 5

    a = 5, b = 12, c = 13

    a = 7, b = 24, c = 25

    a = 9, b = 40, c = 41

    a = 11, b = 60, c = 61

    a = 13, b = 84, c = 85

    a = 15, b = 112, c = 113

    a = 17, b = 144, c = 145

    a = 19, b = 180, c = 181

    a = 21, b = 220, c = 221

    a = 23, b = 264, c = 265

    a = 25, b = 312, c = 313

    a = 27, b = 364, c = 365

    a = 29, b = 420, c = 421

    a = 31, b = 480, c = 481

    a = 33, b = 544, c = 545

    a = 35, b = 612, c = 613

    a = 37, b = 684, c = 685

    a = 39, b = 760, c = 761

    a = 41, b = 840, c = 841

    a = 43, b = 924, c = 925

    a = 45, b = 1012, c = 1013

    a = 47, b = 1104, c = 1105

    a = 49, b = 1200, c = 1201

    a = 51, b = 1300, c = 1301

    a = 53, b = 1404, c = 1405

    a = 55, b = 1512, c = 1513

    a = 57, b = 1624, c = 1625

    a = 59, b = 1740, c = 1741

    a = 61, b = 1860, c = 1861

    a = 63, b = 1984, c = 1985

    a = 65, b = 2112, c = 2113

    a = 67, b = 2244, c = 2245

    a = 69, b = 2380, c = 2381

    a = 71, b = 2520, c = 2521

    a = 73, b = 2664, c = 2665

    a = 75, b = 2812, c = 2813

    a = 77, b = 2964, c = 2965

    a = 79, b = 3120, c = 3121

    a = 81, b = 3280, c = 3281

    a = 83, b = 3444, c = 3445

    a = 85, b = 3612, c = 3613

    a = 87, b = 3784, c = 3785

    a = 89, b = 3960, c = 3961

    a = 91, b = 4140, c = 4141

    a = 93, b = 4324, c = 4325

    a = 95, b = 4512, c = 4513

    a = 97, b = 4704, c = 4705

    a = 99, b = 4900, c = 4901

    a = 101, b = 5100, c = 5101

    a = 103, b = 5304, c = 5305

    a = 105, b = 5512, c = 5513

    a = 107, b = 5724, c = 5725

    a = 109, b = 5940, c = 5941

    a = 111, b = 6160, c = 6161

    a = 113, b = 6384, c = 6385

    a = 115, b = 6612, c = 6613

    a = 117, b = 6844, c = 6845

    a = 119, b = 7080, c = 7081

    a = 121, b = 7320, c = 7321

    a = 123, b = 7564, c = 7565

    a = 125, b = 7812, c = 7813

    a = 127, b = 8064, c = 8065

    a = 129, b = 8320, c = 8321

    a = 131, b = 8580, c = 8581

    a = 133, b = 8844, c = 8845

    a = 135, b = 9112, c = 9113

    a = 137, b = 9384, c = 9385

    a = 139, b = 9660, c = 9661

    a = 141, b = 9940, c = 9941

    a = 143, b = 10224, c = 10225

    a = 145, b = 10512, c = 10513

    a = 147, b = 10804, c = 10805

    a = 149, b = 11100, c = 11101

    a = 151, b = 11400, c = 11401

    a = 153, b = 11704, c = 11705

    a = 155, b = 12012, c = 12013

    a = 157, b = 12324, c = 12325

    a = 159, b = 12640, c = 12641

    a = 161, b = 12960, c = 12961

    a = 163, b = 13284, c = 13285

    a = 165, b = 13612, c = 13613

    a = 167, b = 13944, c = 13945

    a = 169, b = 14280, c = 14281

    a = 171, b = 14620, c = 14621

    a = 173, b = 14964, c = 14965

    a = 175, b = 15312, c = 15313

    a = 177, b = 15664, c = 15665

    a = 179, b = 16020, c = 16021

    a = 181, b = 16380, c = 16381

    a = 183, b = 16744, c = 16745

    a = 185, b = 17112, c = 17113

    a = 187, b = 17484, c = 17485

    a = 189, b = 17860, c = 17861

    a = 191, b = 18240, c = 18241

    a = 193, b = 18624, c = 18625

    a = 195, b = 19012, c = 19013

    a = 197, b = 19404, c = 19405

    a = 199, b = 19800, c = 19801

    a = 201, b = 20200, c = 20201

    由于程序中加入了是否为勾股数的判断,因此这个清单应该是准确的。这个小题目求解下来,我自己的感觉是做事的方法中算法还是至关重要的!

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • 勾股数

    2019-08-20 20:55:51
    勾股数 题目 特殊毕达哥拉斯三元组 毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足 ...由素勾股数的性质可知,只需要求出素勾股数那么它的倍数也是勾股数,而要求素勾股数要借助...

    素勾股数

    题目

    特殊毕达哥拉斯三元组

    毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足
    a方 + b方 = c方

    例如,3方 + 4方 = 9 + 16 = 25 = 5方。

    有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积a b c。

    题目解析

    在这里插入图片描述

    由素勾股数的性质可知,只需要求出素勾股数那么它的倍数也是勾股数,而要求素勾股数要借助性质四

    代码演示

    #include<stdio.h>
    #include<math.h>
    int gcd(int m, int n) {
        return(n ? gcd(n, m%n) : m); //求最大公约数
    }
    
    int main() {
        int ans = 0;
        for(int n = 1; n <= 33; n++) { 
            for(int m = n + 1; m <= 33; m++) { // m一定要大于n
                if(gcd(m ,n) != 1) continue;
                int a = 2 * n * m;
                int b = m * m - n * n;
                int c = m * m + n * n;
                if(1000 % (a + b + c) == 0) { //如果1000 % (a + b + c) == 0那么要求勾股数就是它的倍数
                    int k = 1000 / (a + b + c);  
                    ans = a * b * c *(int)pow(k, 3);
                }
                
            }
        
        } 
         printf("%d", ans);
    }
    
    展开全文
  • Java 勾股数

    2019-01-22 16:58:57
     勾股数是一组三个自然数,a &lt; b &lt; c,以这三个数为三角形的三条边能够形成一个直角三角形  输出所有a + b + c &lt;= 1000的勾股数  a小的先输出;a相同的,b小的先输出。 输出格式  每行为一...
  • 主要介绍了Python实现获取前100组勾股数的方法,涉及Python数值计算与判断相关操作技巧,需要的朋友可以参考下
  • 趣味整数-勾股数-java

    千次阅读 2016-04-20 21:54:34
    所谓勾股数,一般是指能构成直角三角形三条边的三个正整数(a,b,c) 即a*a+b*b=c*c  求1000以内的勾股数 求10000以内的勾股数 public class Main { public static void getGouGuNum(int num){ for(int i=1 ;...
  • 华为机试——素勾股数

    千次阅读 2020-04-06 12:51:50
    * 如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数。 * 如果 (a, b, c) 互质,它们就称为素勾股数。 * 给定正整数N, 计算出小于或等于N的素勾股数个数。 * 输入描述:输一个正整数 * 输出描...
  • 勾股数:a ^2 + b ^2=c ^2 求出1000以内的所有勾股数。 这里我们用两种方法,第一种是穷举法,相对耗时较多,第二种是简化了的穷举法,相比第一种耗时较少。 package _3InterestingInteger; public class _3_6_1 { ...
  • 这篇文章讲述的是算法趣味整数部分的勾股数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。 问题描述 求100以内的所有勾股...
  • 勾股数元祖(java)

    2021-08-19 23:37:26
    无奈 /** * @version 1.0.0 * @auth lsjweiyi * @date 2021/8/15 */ public class Main3 { public static void main(String[] args) { // 寻找[n,m]范围内的勾股数元祖 int n = 1; int m = 10000; int index=0;//...
  • 勾股数

    2018-12-02 11:59:46
    问题: 代码:#include&lt;stdio.h&gt; int main() { int count=0,c,i,j,k; scanf("%d",&amp;c); while(count&lt;4) { k=0; for(i=1;i&lt;c;i++) ...printf(“N0%d:...
  • 题目描述: 一组勾股数满足:a2+b2=c2; 素勾股数:a,b,c彼此...首先找出勾股数,再判断是不是素勾股数。(如果N较大,注意定义成int可能超范围,当然N很大时就不能用暴力破解法了……) 代码: #include &...
  • def gcd(m,n): # 求两个的最大公约数,若为1则互为质数,返回TRUE if n== 0: m,n = n,m while m !=0: m,n = n%m, m if n == 1: return True else: return False def gou_number(...
  • 这里勾股数是符合a2+b2=c2的整数,比如32+42=52,52+122=132,怎么把符合条件的勾股数找出来呢?用代数替代的方法可以极大简化程序,直至一个判断都不用。 可以设a=m2-n2,b=2mn,那么自然c=m2+n2. 它们正好满足勾股...
  • #include<stdio.h> void main() { int a,b,c,n; scanf("%d",&n); for(a=1;a<=n;a++) { for(b=1;b<=n;b++) for(c=1;c<=n;c++) if(aa+bb==c*c) printf("[%d,%d,%d]\t",a,b,c);...}
  • C语言求勾股数(详解版)问题描述求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。问题分析根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内...
  • 【题目】 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形。 【代码】 int main() { ll n,b,c; scanf("%lld",&n); ll t=n/2;... b=2*t*t+2*...
  • C++实现元组

    2019-10-07 08:49:36
    一般我们使用struct时需要在头文件中定义,例如 struct Example {  int a;  char b;...这样将数据打包好必须在程序运行之前将其定义好,如果有需求在程序运行时添加数据,...有一个结构叫做元组,如{“abcd”,1,...
  • 华为机试23题总结

    2021-02-28 20:55:42
    第一题 勾股元组数 // 如果三个正整数A B C ,A... // 则称其为勾股数元组。 // 请求出给定n m 范围内所有的勾股数元组 // 输入描述 // 起始范围 1<n<10000 n<m<10000 // 输出目描述 // abc 保证a<b...
  • 勾股数组

    2018-10-08 11:25:59
    本原勾股数组是指一个自然数三元组(a,b,c),其中a,b,c没有公因数,且满足a2+b2=c2a^2 +b^2=c^2a2+b2=c2 显然,a,b奇偶性不同,且c是奇数 证明: 由a2+b2=c2a^2+b^2=c^2a2+b2=c2 得a2=c2−b2=(c+b)(c−b)a^2=c^2-b^2=(c...
  • 本节书摘来自异步社区《Haskell趣学指南》一书中的第1章,第1.6节元组,作者 【斯洛文尼亚】Miran Lipovaca,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.6 元组元组(tuple)允许我们将多个异构的值...
  • 勾股定理 传送门. 题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使...1.易得当输入的数为0,1,2时,找不到勾股数,直接输出-1。 2.我们只需要输出一组正解,所以我们不妨设输入的数a为...
  • Python 趣味百题

    万次阅读 多人点赞 2016-05-19 09:07:25
    趣味整数 1 不重复的3位数 -易 2 水仙花数 -易 3 完全数 -中 4 相亲数 -中 5 黑洞数 -中 6 勾股数 -易 7 自守数 -易 8 3位反序数 -中 趣味素数 1 素数
  • 本原勾股数组(PPT)是一个三元组(a,b,c),其中a,b,c无公因数,且满足a² +b² =c²。 很明显存在无穷多个勾股数组(abc同乘以n),下面研究abc没有公因数的情况,先写出一些本原勾股数组: case:(3,4,5) (5,12...
  • 除了 1,2 没用答案,其余的所有正整数满足以下勾股数结论。 可以记忆一下 代码 # include using namespace std ; # define maxn 100005 # define maxm 1000006 # define ll long long int # ...
  • 本次在线测试包含两道题目,难度跟通知时...No.1 勾股数元祖 题目描述: 也称为 “素勾股数” ,其有以下性质: 本题需要注意的是, 多组勾股数元祖请按照按a升序,b升序,最后c升序的方式输出。 源程序: #inc...
  • Python练习(4)

    2018-09-29 20:39:23
    所谓勾股数,一般是指能够构成直角三角形3条边的3个正整数(a,b,c)。 即a²+b²=c²,a,b,cΣN 求1000以内的勾股数。 代码 def fun(n): for i in range(1,n): for j in range(i+1,n): #避免出现重复,取 i+1到 n...
  • ACM数论

    千次阅读 2012-07-21 14:24:26
    1、本原勾股数: 概念:一个三元组(a,b,c),其中a,b,c没有公因数而且满足:a^2+b^2=c^2 首先,这种本原勾股数的个数是无限的,而且构造的条件满足: a=s*t,b=(s^2-t^2)/2,c=(s^2+t^2)/2 其中s>t>=1是...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

勾股数元组