我在想一个算法来解决与p素数的同余ax = 1 mod p。我在考虑用费马定理。因为我知道
a ^ (p-1) = 1 mod p
那就是
a ^ (p-1) = a * (a ^ (p-2))
这意味着a ^ (p-2) mod p是解决方案。不幸的是,这个解决方案,虽然在数学上是正确的,但对计算机来说并不好,因为对于大素数,我必须做a ^ (p-2),这通常是不可计算的。
哪种算法对计算机科学有好处?
我想为大整数找到(n选择r),并且我还必须找出该数字的mod。
long long int choose(int a,int b)
{
if (b > a)
return (-1);
if(b==0 || a==1 || b==a)
return(1);
else
{
long long int r = ((choose(a-1,b))%10000007+(choose(a-1,b- 1))%10000007)%10000007;
return r;
}
}
我正在使用这段代码,但我
我有很多需要在Matlab中求逆的大矩阵(大约5000 x 5000)。我实际上需要反转,所以我不能使用mldivide,这对于求解一个b的Ax=b来说要快得多。
我的矩阵来自一个问题,这意味着它们有一些很好的性质。首先,它们的行列式是1,所以它们绝对是可逆的。但是,它们是不可对角化的,或者我会尝试将它们对角化,颠倒它们,然后再将它们放回原处。它们的条目都是实数(实际上是有理的)。
我使用Matlab来获得这些矩阵,对于这些东西,我需要对它们的求逆进行处理,所以我更喜欢一种加速Matlab的方法。但是,如果我可以使用另一种更快的语言,请让我知道。我不知道很多其他的语言(只懂一点C和一点不懂Ja
我必须反演一个大型稀疏矩阵(50000 X 12000)。它最初以numpy.ndarray的形式存储,矩阵的大小约为3.5GB。我已经尝试过使用numpy.linalg.pinv来转换这个矩阵,但是它崩溃了jupyter笔记本内核。将此numpy.ndarray转换为scipy.sparse.csr_matrix (稀疏矩阵格式)是可行的,但我不知道有任何函数可以计算csr_matrix的伪逆。
如何求大型稀疏矩阵的伪逆?
我想求一个矩阵q+1e-5*np.ye( d) (size d×d)的逆,并使用下面的代码来获得近似结果。
Q = X.dot(X.T) # X is a large sparse matrix, Q is singular
P = np.linalg.inv(Q+1e-5*np.eye(d))
但我得到了这个:
P=[[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]
...,
[ nan nan na
我遇到的问题是x= (16807 X)% 65536
ie 16807k≡x (mod 65536)
我需要计算,知道x。到目前为止,我最大的努力是一种野蛮的力量。有计算k的数学方法吗?如果不是,我希望对我当前的代码进行任何优化。
t = x;
while ( t += 15115 ) // 16807k = 65536n + x - this is the n
{
if (t%16807 == 0)
return t/16807;
}
return x;
编辑:将+=更改为15115
我有计算下三角矩阵求逆的代码。如何通过对下面的代码稍加修改来计算上三角矩阵的求逆? function L = L_inv(A)
[n,n] = size(A);
L = zeros(n);
for i=1:n
L(i,i) = 1/A(i,i);
for j=i+1:n
L(j,i)=-A(j, i:j-1)*L(i:j-1,i)/A(j,j);
end
end
所以我在循环中嵌入了一个循环:
int a,b,n;
for (a = 1; a <=n; a++) {
for (b = 0; b < n; b+=a)
cout << "hey" << endl;
}
N是2的幂
我试着去理解如何计算时间复杂度,但是我很难弄清楚这其中的大θ符号。
我知道外部循环在O(n)时间内运行,但是由于b+=a的原因,我不确定内环,我知道如果我有两个循环的时间,我可以把它们乘以得到函数的大θ时间,但是我不知道内环运行在什么位置。
当我插入样本n's时。2,4,8,16),然后内环分别环
我正在尝试用boost做一个简单的矩阵求逆运算。但是我得到了一个错误。基本上,我试图找到的是inversted_matrix =逆(trans(矩阵)*矩阵),但我得到了一个错误
Check failed in file boost_1_53_0/boost/numeric/ublas/lu.hpp at line 299:
detail::expression_type_check (prod (triangular_adaptor<const_matrix_type,
upper> (m), e), cm2)
terminate called after throwing
我正在学习“大O”( Big ),并且被一个问题困住了。
问题-
int sample_function (int x) {
if (x<1){
return x;}
int y = x/2;
return sample_function (y) + sample_function (x-y);
}
如果我们调用(n/2)的2个递归调用,那么大O会是什么?我知道除法递归函数(n/2)的大O是O(log(n)),但不确定这个问题。