【发布时间】:2014-04-12 20:05:43
【问题描述】:
我已经给出了矩阵的迹线'n'。我想知道有多少矩阵(仅 2*2 阶)其迹线等于'n',并且所有矩阵必须是 正可逆,即它们的行列式必须大于'0'。
For ex:
trace=3
No.of matrices=2
trace=4
No.of matrices=11
trace=5
No.of matrices=30
我为此编写了一个代码,但效率不高,因为我的代码成功地为n=1500 提供了输出,之后我超出了时间限制。
谁能帮我?
我的代码是:
#include<stdio.h>
int main()
{
int t,n,nsot,i,j,l;
int arr[2000],k;
unsigned long long sum1=0,sum2=0,sum=0;
scanf("%d",&t);
while(t--)
{
sum1=0;
sum2=0;
//sum=0;
scanf("%d",&n);
nsot=n/2;
for(i=1;i<=nsot;i++)
{
arr[i]=i*(n-i);
//printf("%d ",arr[i]);
sum1=0;
for(k=1;k<arr[i];k++)
{
//printf("%f\n",ceil(arr[i]/k));
sum1=sum1+((arr[i] - 1) / k);
}
if(i==(n-i))
sum=sum1;
else
sum=0;
//printf("%d\n",sum);
//printf("%llu",sum2);
sum2=sum1+sum2;
}
printf("%llu\n",(2*sum2)-sum);
}
}
【问题讨论】:
-
可逆意味着行列式!= 0。它们必须是可逆的,还是行列式必须是严格正的?
-
一定要使用
long long吗?只需long,它可能会运行得更快。 -
对于方阵“A”的可逆性条件是|A|!=0,对于正可逆性|A|>0。
-
数据类型没有问题!!
-
@madhurgarg 这不是我的问题。停止对人无礼,开始正确回答他们的问题。