精华内容
下载资源
问答
  • 满意答案ktjw73872014.12.11采纳率:54%等级:10已帮助:1016人#include"stdio.h"#include"math.h"voidpythagoreantriple(intmin,intmax,intn)//求范围内的勾股数{inti,j,k=0;printf("case%d:",n);for(i=min;i{for(j...

    满意答案

    00e27ab806e4881f8254fe7ae8741834.png

    ktjw7387

    2014.12.11

    00e27ab806e4881f8254fe7ae8741834.png

    采纳率:54%    等级:10

    已帮助:1016人

    # include "stdio.h"

    # include "math.h"

    void pythagoreantriple(int min,int max,int n)//求范围内的勾股数

    {

    int i,j,k=0;

    printf("case %d:",n);

    for(i=min;i

    {

    for(j=i+1;j

    if(sqrt(i*i+j*j)<=max&&sqrt(i*i+j*j)==(int)sqrt(i*i+j*j))//判断是否满足勾股定理,sqrt(i*i+j*j)==(int)sqrt(i*i+j*j)是判断开方后是否为整数

    {

    k++;

    printf("%d,%d,%d;",i,j,(int)sqrt(i*i+j*j));

    }

    }

    if(k==0)

    {

    printf("No pythagorean triple\n");

    }

    else

    {

    printf("\n");

    }

    }

    void main()

    {

    int input[3][2]={{1,10},{6,9},{1,50}},i,k=1;

    for(i=0;i

    {

    pythagoreantriple(input[i][0],input[i][1],k++);

    }

    }

    01分享举报

    展开全文
  • 勾股数组

    千次阅读 2019-05-16 13:11:26
    毕达哥拉斯定理(即勾股定理)经典的公式;对于一个直角三角形中两条直角边长的平方和等于斜边长的平方。 勾股数组(a,b,c)为满足方程:的自然数三元组。 对于一个勾股三元组(a,b,c)乘以整数d,得到(da...

    毕达哥拉斯定理(即勾股定理)经典的公式;对于一个直角三角形中两条直角边长的平方和等于斜边长的平方。

                                                                                     a^{^{2}} + b^{^{2}} = c^{^{2}}

    勾股数组(a,b,c)为满足方程:a^{2} + b^{2} = c^{2}的自然数三元组。

    对于一个勾股三元组(a,b,c)乘以整数d,得到(da,db,dc)也是勾股数组。

    因为:(da)^{2} + (db)^{2} = d^{2}(a^{2} + b^{2}) = d^{2}c^{2} = (dc)^{2}

    即得到勾股数组是无穷多个。

    上式可以知道一个勾股三元组可以通过乘以整数d来得到新的勾股三元组。所以问题转化为只需要关注最大公约数为1的勾股三元组。

    本原勾股数组(Primitive Pythagorean Array):一个自然数的三元组(a,b,c),其中a,b,c没有公因数,且满足a^{2} + b^{2} = c^{2}

    接下来我们进行简单描述来得到勾股数组定理(由于证明篇幅太大,严谨的证明可阅读数论相关书籍或资料)。

    首先根据本原勾股数组的定义a,b,c没有公因数,所以a,b,c不能都为偶数,否则可提出关于2的倍数。

    其次假设a和b都为奇数,则a^{2}b^{2}也都为奇数(奇数个奇数还是奇数),那么c必须为偶数:

    令x,y,z使得:

                                 a = 2x + 1,b = 2y + 1,c = 2z

    代入a^{2} + b^{2} = c^{2}得:

                                          (2x + 1)^{2} + (2y + 1)^{2} = (2z)^{2}4x^{2} + 4x + 4y^{2} + 4y + 2 = 4z^{2}

    两边除以2得:

                           2x^{2} + 2x + 2y^{2} + 2y + 1 = 2z^{2}

    可以看出等式左边是一个奇数而右边是一个偶数,所以a与b不能都为奇数。

    所以得到a和b中有一个为奇数一个为偶数则c为奇数。

    因为偶数减去一个奇数得到一个奇数是显然的事实,所以我们令a为奇数,b为偶数,则:

    a^2=c^2-b^2;再由平法差公式得:a^2=(c+b)(c-b).

    这里断言:假设正整数d是c-b和c+b的公因数,根据整除性质,可知两数和两数差也可被d整除。即:

    (c+b)+(c-b)=2c(c+b)-(c-b)=2b   , d\mid 2c  ,d\mid 2b.

    由于b与c没有公因数(因为这里的前提都是假设是本原勾股数组),所以d的为1或者2。而初始(c+b)(c-b)=a^2a^2

    是一个奇数。得到d为1。

    由于素数分解存在唯一性,所以c+b和c-b必须为平方数;设c+b=s^2c-b=t^2其中s>t>=1(s,t为没有公因数的奇数)由此得:

    勾股数组定理:

    每个本原勾股数组(a, b, c)(其中a为奇数,b为偶数)有公式:a=st,b=\frac{s^2-t^2}{2},c=\frac{s^2+t^2}{2},

    其中s>t>=1是任意没有公因数的整数.

                            

    展开全文
  • 搜索热词问题描述求100以内的所有勾股数。所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。问题分析根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出...

    搜索热词

    问题描述

    求100以内的所有勾股数。

    所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。

    问题分析

    根据“勾股数”定义,所求三角形三边应满足条件 a2 + b2 = c2。可以在所求范围内利用穷举法找出满足条件的数。

    算法分析

    采用穷举法求解时,最容易想到的一种方法是利用3个循环语句分别控制变最a、b、c的取值范围,第1层控制变量a,取值范围是1〜100。在a值确定的情况下再确定b值,即第2层控制变量b,为了避免结果有重复现象,b的取值范围是a+1〜100。a、b的值已确定,利用穷举法在b+1〜100范围内一个一个的去比较,看当前c值是否满足条件 a2 + b2 = c2,若满足,则输出当前a、b、c的值,否则继续寻找。主要代码如下:

    //...

    for(a=l; a<=100; a++) /*确定a的取值*/

    for(b=a+l; b<=100; b++) /*确定b的取值*/

    for(c=b+l; c<=100; c++) /*确定c的取值*/

    if(a*a+b*b==c*c)

    printf ("%d\t%d\t%d\n",a,b,c) /*判断三个变量是否满足勾股数条件*/

    //...

    但是上述算法的效率比较低,根据 a2 + b2 = c2 这个条件,在a、b值确定的情况下,没必要再利用循环一个一个去寻找c值。若a、b、c是一组勾股数,则 a2 + b2 的平方根一定等于c,c的平方应该等于a、b的平方和,所以可将的平方根赋给c,再判断c的平方是否等于。根据“勾股数”定义将变量定义为整型,a2 + b2 的平方根不一定为整数, 但变量c的类型为整型,将一个实数赋给一个整型变量时,可将实数强制转换为整型(舍弃小数点之后的部分)然后再赋值,这种情况下得到的c的平方与原来的的值肯定不相等,所以可利用这一条件进行判断。

    下面是完整的代码:

    #include

    #include

    int main()

    {

    int a,c,count=0;

    printf("100以内的勾股数有:\n");

    printf(" a b c a b c a b c a b c\n");

    /*求100以内勾股数*/

    for(a=1; a<=100; a++)

    for(b=a+1; b<=100; b++)

    {

    c=(int)sqrt(a*a+b*b); /*求c值*/

    if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=100) /*判断c的平方是否等于a2+b2*/

    {

    printf("%4d %4d %4d ",c);

    count++;

    if(count%4==0) /*每输出4组解就换行*/

    printf("\n");

    }

    }

    printf("\n");

    return 0;

    }

    运行结果:

    100以内的勾股数有:

    a b c a b c a b c a b c

    3 4 5 5 12 13 6 8 10 7 24 25

    8 15 17 9 12 15 9 40 41 10 24 26

    11 60 61 12 16 20 12 35 37 13 84 85

    14 48 50 15 20 25 15 36 39 16 30 34

    16 63 65 18 24 30 18 80 82 20 21 29

    20 48 52 21 28 35 21 72 75 24 32 40

    24 45 51 24 70 74 25 60 65 27 36 45

    28 45 53 28 96 100 30 40 50 30 72 78

    32 60 68 33 44 55 33 56 65 35 84 91

    36 48 60 36 77 85 39 52 65 39 80 89

    40 42 58 40 75 85 42 56 70 45 60 75

    48 55 73 48 64 80 51 68 85 54 72 90

    57 76 95 60 63 87 60 80 100 65 72 97

    总结

    以上是编程之家为你收集整理的C语言求勾股数(详解版)全部内容,希望文章能够帮你解决C语言求勾股数(详解版)所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    展开全文
  • 勾股

    千次阅读 2017-08-09 20:09:53
    勾股数 题目描述 我国是最早了解勾股定理的国家之一。早在三千多年前,周朝数学家商高就提出,将一根直尺折成一个直角,如果勾等于三、股等于四,那么弦就等于五,即“勾三、股四、弦五”。(注:勾、股、弦分别指...

    勾股数

    题目描述

    我国是最早了解勾股定理的国家之一。早在三千多年前,周朝数学家商高就提出,将一根直尺折成一个直角,如果勾等于三、股等于四,那么弦就等于五,即勾三、股四、弦五(注:勾、股、弦分别指不等腰直角三角形中的较短直角边、较长直角边、斜边)它被记载于我国古代著名的数学著作《周髀算经》中。在这本书中的另一处,还记载了勾股定理的一般形式。
    1945
    年,人们在研究古巴比伦人遗留下的一块数学泥板(普林顿322号)时,惊讶地发现上面竟然刻有15组能构成直角三角形三边的数,其年代远在商高之前。
    我们知道直角三角形两条直角边长a,b与斜边长之间满足等式:a² + b² = c² 。我们满足这一等式的数组(a, b, c)称作勾股数组。给定正整数N,请你计算,对于1≤a≤b≤c≤N,能构成多少组勾股数组?

    输入格式 2078.in

    一个正整数N

    对于30%的测试数据,1≤N≤5 000
    对于70%的测试数据,1≤N≤50 000
    对于100%的测试数据,1≤N≤1 000 000

    输出格式 2078.out

    所求的答案。

    输入样例 2078.in

    25

    输出样例 2078.out

    8

    解释: 共有8组勾股数组:(3,4,5),(6,8,10),(9,12,15),(12,16,20),(15,20,25),(5,12,13),(7,24,25),(8,15,17)。

        这题的解法也是妙,与数学的因式分解有点关联。直接说正解吧,自己的水分说来也没什么意义。

    大体思路:

        勾股定理是是初二上学期的内容,在直角三角形中a²=c²-b²,由因式分解就可以得出a²=(c+b)(c-b),把c+b假设为y,c-b为x,那么x和y必须要是a的因数。

    如果把题目简化为只给a限定范围,而c和b随意,会方便很多。

        因此,枚举一重a,并算出a的因数,枚举a的因数,并由a/b可以算出y,最后再用公式b=(y-x)/2,c=(y+x)/2,最后判断一下b和c是否在范围n以内。然后ans++。

    分解质因数:

        这就要用到分解质因数的方法了,也不知道是以前没学好还是怎么样,听的时候一脸懵逼,后来画了几个数才清楚一些了。

        举个例子,求64的因数。64 –> 32 ,32 –> 16,16 –>8 ,  8 –> 4 ,4 –>2,2–>1。其中都是除以质数二的关系,数一下,有6次,就是26,便是64分解质因数后的结果。

        但在分解质因数前要打一个预处理,算出每个数的最小的质因数,用筛数法。以便在后面快速地得出。

    实现:

        用一个数组(c)存当前a的质因数有哪些,再开一个数组(num)存次数。

    用分解质因数快速求出a的因数:

        在枚举a时,用dfs算出因数。假设数组c有两个数,第一个数的次数num为3,便枚举有多少次,用x一直乘上去。

        我一开始傻傻地双重for循环,既按顺序累加上去一般,这样会漏掉很多情况。

    为什么枚举因数不会超时:

        这是一个特别神奇的事情,由wyy的实验得出,10^9的因数也只有100个,因此,n的因数基本是接近log n的。

        而用筛数法预处理算出每个数的最小质因数,时间复杂度也只是O(n log log n)或O(n)。

    关于某些细节:

         1、x不可能超过a,三角形定理,c-b<a,两边之差小于第三边。

         2、因为分解质因数算的是n没有平方之前的次数,因此平方以后,要把num乘2。

         3、一开始我蠢蠢地把c和num清零,一下子就变成了平方级别,超时抄得死死的。超时错法:用num[i]记录质数i的次数,这样就必须每一次都要清空。正确做法:记下是第几个质数,如果与前面一个数的最小质因数不同,便k++,num[k]=1。而且c的记录同样要判断与前面记录的数是否相同,不然可能会开很多个数组记录的都是同一个数。这样便会有很多重复的情况。

         4、为了避免算重,限制a必须要小于c并且小于b。

         5、有些要用longlong,不然数字大会出错。

    代码如下

    #include
    #include
    #include
    #include
    using namespace std;
    const int maxn=1000005;
    long long n;
    int k,v[maxn],e,ans,c[maxn],num[maxn];
    void init()
    {
    	for(long long i=2;i<=n;i++)
    	{
    		if(v[i]==-1)
    		{
    			for(long long j=1;i*j<=n;j++) 
    				v[i*j]=i;
    		}			
    	}
    }
    void dfs(long long now)
    {
    	k=0,e=0;
    	long long last=0;
    	while(now!=1)
    	{
    		long long next=v[now];
    		if(next!=last) c[++e]=next;
    		if(next!=last) num[++k]=1;
    		else num[k]++;
    		last=next;
    		now=now/v[now];
    	}
    }//分解质因数 
    void dfs2(long long a,long long x,long long now)
    {
    	if(x>=a) return;
    	if(now>e)
    	{
    		long long aa=a*a;
    		long long y=aa/x;
    		if(y%2==x%2)
    		{
    			long long cc,bb;
    			bb=(x+y)/2;
    			cc=(y-x)/2;
    			if(cc<=n&&bb<=n&&a>n;
    	memset(v,-1,sizeof(v));
    	init();
    	start();
    	cout<

    展开全文
  • 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(...
  • Java 勾股

    2019-01-22 16:58:57
     勾股数是一组三个自然数,a &lt; b &lt; c,以这三个数为三角形的三条边能够形成一个直角三角形  输出所有a + b + c &lt;= 1000的勾股数  a小的先输出;a相同的,b小的先输出。 输出格式  每行为一...
  • 勾股数学习

    2013-05-14 09:57:00
    勾股数又名毕氏三元数凡是可以构成一个直角三角形三边的一组正整数,称之为勾股数。 编辑本段常用套路 简介 所谓勾股数,一般是指能够构成直角三角形三条边的三个正整数(a,b,c)。 即a2+b2=c2,a,...
  • 勾股

    2017-07-08 12:21:37
    以下的方法可用来找出勾股数。设 m > n 、 m 和 n 均是正整数, {\displaystyle a=m^{2}-n^{2}}{\displaystyle b=2mn}{\displaystyle c=m^{2}+n^{2}} 若 m 和 n 是互质,而且 m 和 n 其中有一个是...
  • 本原勾股数组

    千次阅读 2012-08-02 22:31:44
    简单的勾股数大家想必都知道,我国古代数学家发现的"勾广三,股修四,径隅五"。  3^2+4^2=5^2  满足这样性质的数(a^2+b^2=c^2)我们则称为勾股数,其满足毕达哥拉斯定理即勾股定理。  下面为了简单起见,那么...
  • (1)勾股数组

    2020-09-12 22:52:18
    勾股数组 在国外又称毕达哥拉斯定理,初中都学过一个直角三角形的两个直角边的平方和等于斜边长的平分。 公式:a2+b2=c2\hspace{5cm}a^{2}+b^{2}=c^{2}a2+b2=c2 是否有无穷个勾股数组 我们已经找到了一些勾股数组例如...
  • 「整理」勾股数组

    2018-12-29 19:39:00
    本文(目前)进入洛谷日报2019-01-05队列 写在前面 我们大概老早就知道勾股定理,...对于不知道勾股定理的童鞋们,不了解没关系,因为这里没有三角形,也不是探讨怎么求第三边,我们只探讨勾股数组。 这里的\(a \equi...
  • 关于勾股数的规律

    2015-11-19 21:19:00
    前面部分还是不用看了,基本勾股数的构造可以直接跳到UPD部分  有可能是初中写的最后一篇了,中考啊~~ 以前跟一些人提到过,互质的勾股数a,b,c(即a²+b²=c²)都满足一个规律(其实互质满足了,那么不互质也一定...
  • 本原勾股数组 本原勾股数组(简称PPT)是一个三元组(a,b,c),其中a,b,c没有公因数,且满足 a2+b2=c2a^2+b^2=c^2a2+b2=c2 下面的定理可以求它的所有解。 勾股数组定理 每个本原勾股数组都可以由以下公式得出: a=...
  • 本原勾股数组(PPT): a2 +b2 =c2 (其中gcd(a,b,c)=1) 1、 a,b一奇一偶 c为偶数 2、 a,b,c可以表示为a=st b=(s2 -t2 )/2 c=(s2+t2)/2 其中s、t为奇数且gcd(s,t)=1 3、a,b中必有一个被3整除 4、a,b,c中必有一个被5...
  • uva 106(勾股定理)

    2014-03-26 22:49:00
    思路:暴力会超时所以需要使用勾股定理: 设 m > n 、 m 和 n 均是正整数, a = m2 − n2,b = 2mn,c = m2 + n2 若 m 和 n 是互质,而且 m 和 n 至少有一个是偶数,计算出来的 a, b, c 就是素勾股数...
  •  勾股数组我们都很熟悉,给一个勾股数组同乘一个整数得到的仍是勾股数组,但我们对它并不感兴趣,今天我们只研究它的本原形式(当然是在正整数范围内)。 本原勾股数组(PPT)是一个满足 $ a^{2}+b^{2}=c^{2} $ 的...
  • 数论之勾股数组(毕达哥拉斯三元组) 本原勾股数组(PPT)是一个三元组(a,b,c),其中a,b,c无公因数,且满足a² +b² =c²。 很明显存在无穷多个勾股数组(abc同乘以n),下面研究abc没有公因数的情况,先写...
  • 求正整数N以内的所有勾股数。 所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。 #include"stdio.h" void main() { int n; int i,j,k; int count=0; while(scanf("%d",&n)) { for(i=1;i<=n...
  • 为叙述简便,把毕达哥拉斯三元组(Pythagorean Triples)称为勾股数。 另外,也可以参考《数学女孩2 费马大定理》第2章 勾股定理。 本原勾股数,即毕达哥拉斯三元组,(x,y,z)满足 x2+y2=z2x^2+y^2=z^2x2+y2=z2 x...
  • 这道题的题目明确说了最小的值n是一个质数(n>2),故实际上可以构成勾股数的只有套路一了,所以根据套路一写就行,很水,通过这道题主要是复习一下勾股定理相关知识。 #include int main(){ int m; ...
  • [SMOJ2078]勾股

    2017-08-13 21:15:26
    回忆一下,筛法求质数表的过程,可以发现每个合数第一次都是被自己最小的一个质因数筛掉的。例如: 12 = 2 2 × 3 1 12=2^2\times3^1 ,最早是被 2 筛掉的。不妨记 i i 的最小质因数为 m i n d i v i mindiv_i ,...
  • #include #define pb push_back #define mp make_pair ...勾股数 https://wenku.baidu.com/view/8282f1b669eae009591bec85.html 转载于:https://www.cnblogs.com/stranger-/p/9807591.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 665
精华内容 266
关键字:

勾股素数