| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
个人想到的解题思路所谓的S是factor closed的就是指:S中最大的那个数的所有正因子构成的集合恰好是S(最大的那个数确定的话S其它的数都是确定的)
我们可以按“行优先从小到大”列出这个行列式,然后定义一个“因子行”,比如1,2,3,4,6,12中,6的“因子行”就是1,2,3这3行
对于行列式我们可以尝试性地通过初等行变换将其变成上三角的形式,而最简单的变换方法只需要借助“减法”就能变成“上三角”!而且对于第i行Ai,只需要“减去”是它的因子行。但要注意,对某行进行这种行变换之前,必须先对它所有的因子行进行这种行变换,这恰恰是个递归的定义,而递归的出口就是“行1”(无需变换)
举个例子:
{1,2,3,4,6,12}
1 1 1 1 1 1
1 2 1 2 2 2
1 1 3 1 3 3
1 2 1 4 2 4
1 2 3 2 6 6
1 2 3 4 6 12
对“行2”,“行3”进行变换后得到
1 1 1 1 1 1
0 1 0 1 1 1
0 0 2 0 2 2
1 2 1 4 2 4
1 2 3 2 6 6
1 2 3 4 6 12
由于“行4”的因子行“行1”,“行2”都变换过了,所以可以对“行4”进行变换,即减去“行1”和“行2”
1 1 1 1 1 1
0 1 0 1 1 1
0 0 2 0 2 2
0 0 0 2 0 2
1 2 3 2 6 6
1 2 3 4 6 12
由于“行6”的因子行“行1”,“行2”,“行3”都变换过了,所以可以对“行4”进行变换,即减去“行1”,“行2”和“行3”
1 1 1 1 1 1
0 1 0 1 1 1
0 0 2 0 2 2
0 0 0 2 0 2
0 0 0 0 6 0
1 2 3 4 6 12
最后对“行12”进行变换,即减去前面所有行
1 1 1 1 1 1
0 1 0 1 1 1
0 0 2 0 2 2
0 0 0 2 0 2
0 0 0 0 6 0
0 0 0 0 0 6
最后行列式的值为1*1*2*2*6*6=144
显然,由于变换后是“上三角”,所以只要记住变换后对角线元素的值就足够了,不必把整个行列式都存下来
定义“行n”(注意不是指第n行,而是指这行是由“n与S所有元素的最大公约数”组成)变换后的对角线元素为f(n),那么f(1)=1,f(n)=n-∑f(d) (d|n且0<d<n),用递归可以求出来
而answer=∏f(e) (e|n且0<e<=n)
也许这题还可以进一步用数论函数化简得到更好的公式(不必递归),但水平所限无能为力,只能做到这步
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator