问题:用C语言求5-100的弦数
弦数:一个正整数x其平方等于某两个正整数的平方和,例如: 3 2 + 4 2 = 5 2 3^2+4^2=5^2 32+42=52,则5为弦数。
解:
首先判断一个数字r是不是弦数,另外两个数字为x,y,问题转换为:对于半径为r的圆: x 2 + y 2 = r 2 x^2+y^2=r^2 x2+y2=r2是否存在正整数解,由圆的对称性,我们只需要在 x ∈ [ 1 , r 2 ] x\in[1,\frac{r}{\sqrt 2}] x∈[1,2r]上,即角度在 ( π / 4 , π / 2 ) 的 (\pi/4,\pi/2)的 (π/4,π/2)的圆上寻找解,将x代入圆的方程后,求解y,并确认y是否为整数。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
/*****code here********/
int x,r;
float y;
printf("弦数有:\n");
for(r=5;r<100;r++)
for(x=1;x<r/sqrt(2);x++)
{
y = sqrt(r*r-x*x);
if(y==(int)y)
{
printf("%d,坐标(%d,%f)\n",r,x,y);
break;
}
}
/*****code here********/
system("pause");
return 0;
}
时间复杂度为O( n n n)