一个有趣的编程题,看你会不会?
一个有趣的编程题,看你会不会?
一个有趣的编程题,看你会不会?
编写一个通用程序完成以下任务:
对于输入的任意正整数A,找出两组正整数n1,n2,...,ns和d1<d2<...<ds,使得A=n1*(d1)^2+n2*(d2)^2+...+ns*(ds)^2,如63=9*1+6*(3)^2.所得到的两组正整数还需满足下列条件:
1.d1必须为1, 即d1=1永远成立,n1必须整除A.
2.如果A为偶数,则d2必须为2,如果A为奇数,则d1,d2,..,ds中肯定没有2.
3.如果A为奇数,并且d1,d2,..,ds中有一个为3,则3必须整除A.
4.如果nx=1(x=2,3,...,s),则n1必须整除(dx)^2.
5.输出所有满足条件的正整数n1,n2,...,ns和d1<d2<...<ds.
给出你的算法或源程序.
注: ^2表示某个数的平方
是不是很有挑战性?这是我们老师布置的一道课后编程题,我搞了好多天才完成,现拿出来和大家共享.