问题是找到正整数的最大集合S,使得S的元素的平方和等于给定数量n.
例如:
4 =
2²20
=4²+ 2²38 =5²+3²+
2²300=11²+8²+7²+6²+4²+3²+2²+1².
我有一个及时运行的算法O(2^(sqrt n) * n)
,但它太慢(每个方块的子集).
http://en.wikipedia.org/wiki/Binary_GCD_algorithm
此维基百科条目有一个非常不满意的含义:二进制GCD算法是在同一时间高达60%,比标准的Euclid算法更有效,但迟至1998年克努特的结论是,只有在效率15%的涨幅对他的当代电脑.
还有15年过去了......今天这两种算法如何与硬件的进步相结合?
二进制GCD在低级语言中是否继续优于欧几里得算法,但由于其在Java等高级语言中的复杂性而萎缩?或者是现代计算的差异?
我为什么关心你可能会问?我今天碰巧需要像今天的1000亿这样处理:)这是一个生活在计算时代(糟糕的欧几里德)的干杯.
我想知道如何通过仅使用bitshift或bitwise运算符将整数与另一个整数(均为正)相除来获得余数.该/
经营者或%
经营者不得使用.
例如,为了在除数为形式时获得余数2^k
,以下操作产生余数.
m = Remainder
n = The number
d = The divisor
m = n & ( d - 1 )
但是,此方法仅在d
表单形式时有效2^k
.我想知道类似的非权力方法2
.我目前正在研究一个问题,programming challenges
并希望采用这种方法来减少程序执行时间
让我们N
成为一个数字(10<=N<=10^5)
.
我必须将它分成3个数字(x,y,z)
,以便验证以下条件.
1. x<=y<=z
2. x^2+y^2=z^2-1;
3. x+y+z<=N
Run Code Online (Sandbox Code Playgroud)
我必须找到一个方法中给定数字可以得到多少组合.
我尝试了如下,但它需要花费很多时间才能获得更高的数字并导致超时...
int N= Int32.Parse(Console.ReadLine());
List<String> res = new List<string>();
//x<=y<=z
int mxSqrt = N - 2;
int a = 0, b = 0;
for (int z = 1; z <= mxSqrt; z++)
{
a = z * z;
for (int y = 1; y <= z; y++)
{
b = y * y;
for (int x = 1; x <= y; x++)
{
int x1 …
Run Code Online (Sandbox Code Playgroud) 我们有一些非负数.我们希望找到最大gcd对.实际上这个最大值比这对更重要!例如,如果我们有:
2 4 5 15
GCD(2,4)= 2
GCD(2,5)= 1
GCD(2,15)= 1
GCD(4,5)= 1
GCD(4,15)= 1
GCD(5,15)= 5
答案是5.
这是我遇到的一个有趣的编程难题.由于正整数数组,以及一些K.我们需要找到对(A,B)从数组这样a % b = K
.
我有一个幼稚为O(n ^ 2)解决了这个在这里我们可以检查所有对,使得A%B = K.工作但效率低下.我们当然可以做得比这更好吗?任何有效的算法?哦,这不是功课.
我正在开发一个涉及Koblitz曲线加密目的的项目
在python中需要一个库来实现有限域操作,如Galois Field中的乘法和逆(GF(2 ^ n))
已经尝试过以下库:BitVector https://engineering.purdue.edu/kak/dist/BitVector-3.3.2.html 不幸的是,即使对于大小为2 ^ 163的字段,模数逆操作也工作得太慢.
我有一个函数告诉我Fibonacci序列中的第n个数字.问题是,当试图在Fibonacci序列中找到更大的数字时它变得非常慢有没有人知道如何解决这个问题?
function f = rtfib(n)
if (n==1)
f= 1;
elseif (n == 2)
f = 2;
else
f =rtfib(n-1) + rtfib(n-2);
end
Run Code Online (Sandbox Code Playgroud)
结果,
tic; rtfib(20), toc
ans = 10946
Elapsed time is 0.134947 seconds.
tic; rtfib(30), toc
ans = 1346269
Elapsed time is 16.6724 seconds.
Run Code Online (Sandbox Code Playgroud)
5分钟后我甚至无法获得价值 rtfib(100)
PS:我正在使用八度音阶3.8.1
在回答另一个,我偶然发现了这个问题其实我怎么能找到一个整数的所有因素,而不该符号数学工具箱.
例如:
factor(60)
Run Code Online (Sandbox Code Playgroud)
收益:
2 2 3 5
Run Code Online (Sandbox Code Playgroud)
unique(factor(60))
Run Code Online (Sandbox Code Playgroud)
因此会返回所有素数因子,"1"缺失.
2 3 5
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个可以返回所有因子的函数(1和数字本身并不重要,但它们会很好)
预期输出x = 60
:
1 2 3 4 5 6 10 12 15 20 30 60
Run Code Online (Sandbox Code Playgroud)
我想出了那个相当庞大的解决方案,除了它可能是矢量化之外,是不是有任何优雅的解决方案?
x = 60;
P = perms(factor(x));
[n,m] = size(P);
Q = zeros(n,m);
for ii = 1:n
for jj = 1:m
Q(ii,jj) = prod(P(ii,1:jj));
end
end
factors = unique(Q(:))'
Run Code Online (Sandbox Code Playgroud)
我认为,这个解决方案对于某些大数字会失败,因为perms需要一个<11的向量长度.
对于给定的整数,n
并m
确定x^m
term in的系数(x^2+x+1)^n
是偶数还是奇数?
例如,如果n = 3且m = 4 (x^2+x+1)^3 = x^6 + 3x^5 + [[6x^4]] + 7x^3 + 6x^2 + 3x + 1
,那么项的系数x^4
是6(=偶数).
n
并且m
大到10 ^ 12并且我想在几秒钟内计算,因此您无法在线性时间内计算.
你有任何有效的算法吗?
number-theory ×10
algorithm ×6
math ×4
algebra ×2
java ×2
matlab ×2
c# ×1
cryptography ×1
fibonacci ×1
finite-field ×1
mod ×1
octave ×1
python ×1
python-2.7 ×1