我在想一个算法来解决与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),这通常是不可计算的。
哪种算法对计算机科学有好处?
我试图理解以下算法的时间复杂度(Big),该算法找到x,使得g^x = y (mod p) (即用基g模p求y的离散对数)。
这是伪码:
discreteLogarithm(y, g, p)
y := y mod p
a := g
x := 1
until a = y
a := (a * g) mod p
x++
return x
end
我知道这种方法的时间复杂度是p中二进制数的指数,但这意味着什么,为什么它依赖于p?
我知道复杂度是由循环数(until a = y)决定的,但是p是从哪里来的呢?二进制数字是什么?
对于给定的日期,我使用Steve Kass公式来获得上个月的第n周的第n天。它工作得很好--但我真的不明白模运算数在公式中做了什么。有人能解释一下吗?我试着在下面提供一些假设:
declare @svcDate as datetime= '1/6/2017', @myN as tinyint=4, @myD as tinyint=1
declare @ret datetime;
declare @first datetime -- First of the month of interest (no time part)
declare @nth tinyint
你需要用除法和余数除以10,
考虑这个例子,
163 divided by 10 is 16 and remainder is 3
16 divided by 10 is 1 and remainder is 6
1 divided by 10 is 0 and remainder is 1
请注意,余数始终是被除数的最后一位数字。
如何在C中执行此操作
编码逻辑
alphabet = 'abcdefghijklmnopqrstuvwxyz'
newMessage = ''
message = input('Please enter a message: ')
key = input('Enter a key (1-26): ')
key = int(key)
for character in message:
if character in alphabet:
position = alphabet.find(character)
newPositi
我一直在努力解决这个问题:
找到二项式系数的,C(n, m) = n! / (m! (n - m)!)模10^9 + 7,m <= n < 2 * 10^5。
我的一个想法是,首先,我们可以在线性时间内预先计算所有i从1到n的phi(i)值,也可以用Fermat的小定理计算从1到n模10^9 +7的所有逆数。在那之后,我们知道,一般来说,phi(m * n) = phi(m) * phi(n) * (d / fi(d)), d = gcd(m, n)。因为我们知道gcd((x - 1)!, x) = 1, if x is prime, 2 if x = 4, and x in al
Python允许内置函数pow中的第三个参数,它基本上计算这个第三个参数(pow(a,b,c) = a**b % c)的幂模。
当指数为负值时,它是如何工作的?例如:
pow(6, -2, 13)
#-> 4
pow(6, -2, 12)
#-> Traceback (most recent call last):
#-> File "<stdin>", line 1, in <module>
#-> ValueError: base is not invertible for the given modulus
我试着用这个算法找出素根:
std::vector<unsigned long long> Keyexchange::primroot(unsigned long long val) {
std::vector<unsigned long long> res;
for (unsigned long long i = 2; i<val - 1; i++) {
unsigned long long start = 1;
bool flag = 1;
for (unsigned long long
假设我有一个简单的方程,形式如下:
7x + 4y = n
其中n是我们选择的,x,y和n都是正整数。这是给我们的唯一的方程式。在可能的解中,我们需要解(x,y),其中x是最小的。例如:
7x + 4y = 14, then (2, 0) is the solution
7x + 4y = 15, then (1, 2) is the solution
7x + 4y = 32, then (4, 1) and (0, 8) are the possible solutions,
of which (0, 8) is the correct solution
我想设计一个算法来在尽可能少的运行
我试着用C语言实现“平方求幂”算法,但我的程序有一个奇怪的行为。首先,这里有一小段代码:
long long fast_power_1(long long base, long long power){
long long result = 1;
while (power > 0)
{
if (power % 2 == 0)
{
power = power / 2;
base = base * base;
}
else
{
我有一个矩阵X,大小为n x m。我将X调整为向量,一个长度为n x m的。
我如何“自动”知道向量ith元素a中的元素在X中的位置(坐标)
我已经写了下面的MATLAB代码,但我不知道如何继续。
X = rand(10,10);
[n,m] = size(X);
a = reshape(X, [n*m, 1]);
t = zeros(length(a),1);
for i = 1 : length(a)
t(i) = % I want to perform here the sum over the x and y coordinate values of the element
我遇到的问题是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
我有个号码。例如,我的号码是19。然后,我想在下拉列表中填充乘法范围为5的范围。因此,我的下拉列表将包括:1-5 6-10 11-15 16-19。
我试过模数和除法,但是,我似乎无法得到范围。有固定的方法吗?
样本代码
List<string> range = new List<string>();
int number = 19;
int numOfOccur = (19/5);
for (int i = 1; i < numOfOccur ; i++)
{
range.Add(i + " - " + (i * 5))
}