| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2517 人关注过本帖
标题:1000 以内勾股数
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
哦,我倒是不知道有这个限制,谢谢了,又学到了新东西了!呵呵
听说松花江现在的水很大,容易淹到人,版主小心……

对不礼貌的女生收钱......
2006-05-05 12:06
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

哈哈,我去了,我要是挂了,你就替我做版主


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 12:08
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,做版主的没日没夜的做题,不好……
我说,老大您不是计算机专业的,C也这样强,这不有些吓人吗?
那那些计算机学院的不知得怎么个牛逼法

对不礼貌的女生收钱......
2006-05-05 12:14
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用feng1256在2006-5-5 11:43:00的发言:
–★–这小子非常这么犟 13楼的程序运行结束用时 312毫秒

我12楼的用时 156毫秒, 正好是一半

大家可以试试,我就不发图了,麻烦(因为这题实在没必要争)

soft_wind 14楼建议不可取 register 变量不需要你指定,编译器有自动优化功能



班主同志:并没有人说您老的代码慢呀。也没有自吹13楼的快呀。滑稽


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 12:15
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

#include<stdio.h>
#include<time.h>
#define NMAX 10000
#define NMAX2 100000000
typedef unsigned long UI4;

int isN2(UI4 x)
{ UI4 y0,
y1=x/2;
do
{
y0=y1;
y1=(y0+x/y0)/2;
}
while(y1<y0);
return(y1*y1==x?y1:0);
}

int main()
{ int len=0,ans=0;
UI4 a,a2,b,c,c2;
UI4 t2,t1=clock();
for(a=1;a<NMAX;a++)
{a2=a*a;b=a;
for(++b;(c2=a2+b*b)<=NMAX2;b++)
if(c=isN2(c2))/*此处如有警告可不理*/
{ ans++;
//既测速就关闭printf(...)
//len+=printf("%d,%d,%d ",a,b,c);
//if(len>66)len=0,printf("\n");
}
}
t2=clock();
printf("\ntime unit: %d \n",t2-t1);
printf("\ntotal: %d groups\n",ans);
return 0;
}//在我电脑上:25187个时间单位。
//运行结果1万以内12471组勾股数。


[此贴子已经被作者于2006-5-5 12:56:31编辑过]


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 12:31
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

//在sizeof(int)==4的环境下,如VC++
#include<stdio.h>
#include<time.h>
#define NMAX 10000

int main()
{
int a,b,c,n=0;
int t2,t1=clock();
for(a=3;a<NMAX;a++)
for(b=a+1;b<NMAX;b++)
for(c=b+1;c<=NMAX;c++)
if(a*a+b*b==c*c)
{
n++;
//printf("%5d%5d%5d,",a,b,c);
//if(n%3==0)
//putchar('\n');
}
t2=clock();
printf("time:%d,groups:%d\n",t2-t1,n);
return 0;
}
//太慢,无法忍受


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 12:55
xyelyleh2
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-28
收藏
得分:0 
先谢谢各位。。。。
2006-05-06 20:56
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用xyelyleh2在2006-5-6 20:56:00的发言:
先谢谢各位。。。。

先别急着谢各位。我再给你发个最新最快的。
/*----------------------------*
快速搜索NMAX以内的勾股数组
*----------------------------*/

#include<stdio.h>
#include<math.h>

typedef unsigned long int ui4;

ui4 gcd(ui4 u,ui4 v)
{
return v?gcd(v,(ui4)(u%v)):u;
}

int main()
{
char fmt[]="(%?lu,%?lu,%?lu) ";
ui4 NMAX,nmax,m,n,a,b,c,t,tt;
printf("给出搜索上限: ");
scanf("%lu",&NMAX);
nmax=(ui4)sqrt(NMAX);
printf("\n");
fmt[2]=fmt[7]=fmt[12]=(char)
(log(NMAX-1)/log(10)+'1');
tt=t=0;
for(n= 1 ;n< nmax;n++)
for(m=n+1;m<=nmax;m++)
{ c=m*m+n*n;
if(c>NMAX)break;
if((m+n)%2==0)continue;
if(gcd(m,n)-1)continue;
a=2*m*n;
b=m*m-n*n;
if(a>b)a+=b,b=a-b,a-=b;
t++;//统计本原解有多少个
printf(fmt,a,b,c);//输出本原勾股数
if(t%3==0)printf("\n");
tt+=NMAX/c;//统计全部勾股数组
}
if(t%3)printf("\n");
printf("%ld以内共有勾股数%ld组\n",NMAX,tt);
printf("其中本原勾股数仅有%ld组\n\n",t);
return 0;
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-06 21:00
快速回复:1000 以内勾股数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028891 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved