标签: number-theory

9
推荐指数
2
解决办法
1万
查看次数

找到最接近某个值的公约数的高效算法?

我有两个号码,x1而且x2.对于一个数字y,我想计算公约数x1x2尽可能接近的公约数y.

有一个有效的算法吗?


我认为现在是时候重新解决我的问题并且更清楚了.这不是关于整数...所以,我们有两个数字x1x2.比如说,用户输入一个数字y.我想要找到的是一个y'接近的数字y,x1 % y'并且x2 % y'非常小(0.02例如,小于,但我们可以调用这个数字LIMIT).换句话说,我不需要最优算法,但需要很好的近似.

我感谢你们所有的时间和精力,非常友好!

algorithm math number-theory

9
推荐指数
1
解决办法
3631
查看次数

这段代码如何从任何基数阶乘法中找到尾随零的数量?

下面的代码完美无缺,但我希望有人向我解释它背后的数学.基本上,它是如何工作的?

#include <stdio.h> 
#include <stdlib.h>  /* atoi */

#define min(x, y) (((x) < (y)) ? (x) : (y))

int main(int argc, char* argv[])
{
   const int base = 16;
   int n,i,j,p,c,noz,k;

   n = 7;  /* 7! = decimal 5040 or 0x13B0  - 1 trailing zero */  
   noz = n;
   j = base;
   /* Why do we start from 2 */
   for (i=2; i <= base; i++)
   {
      if (j % i == 0)
      {   
         p = 0;  /* What is …
Run Code Online (Sandbox Code Playgroud)

c algorithm math number-theory

9
推荐指数
1
解决办法
2691
查看次数

如何计算^^ b mod m?

我必须为a,b,m <2 ^ 32的大值有效地计算^^ b mod m,
其中^^是tetration运算符:2 ^^ 4 = 2 ^(2 ^(2 ^ 2))

m不是素数而不是10的幂.

你能帮我吗?

algorithm math number-theory

9
推荐指数
1
解决办法
1976
查看次数

如何确定某个数字是否可以由一组数字组成?

所以我有一个整数,例如1234567890和一组给定的数字,例如{4,7,18,32,57,68}

问题是1234567890是否可以由给定的数字组成(您可以使用多个数字,而不必使用所有数字).在上面的情况中,一种解决方案是:
38580246*32 + 1*18

(不需要提供具体的解决方案,只有在可以完成的情况下)

我的想法是尝试所有解决方案.例如,我会尝试
1*4*+ 0*7 + 0*18 + 0*32 + 0*57 + 0*68 = 4
2*4*+ 0*7 + 0*18 + 0*32 + 0*57 + 0*68 = 8
3*4*+ 0*7 + 0*18 + 0*32 + 0*57 + 0*68 = 12
.....
308 641 972*4*+ 0*7 + 0*18 + 0*32 + 0*57 + 0*68 = 1234567888
308 641 973*4*+ 0*7 + 0*18 + 0*32 + 0*57 + 0*68 = 1234567892 ==>超过
0*4*+ 1*7 + 0*18 + …

c# math numbers number-theory

9
推荐指数
1
解决办法
197
查看次数

检查数字是否为吸血鬼号码的最快方法?

吸血鬼号码在这里定义https://en.wikipedia.org/wiki/Vampire_number.数字V是吸血鬼号码,如果:

  • 它可以表示为X*Y,使得X和Y各自具有N/2个数字,其中N是V中的数字位数
  • X和Y都不应该有尾随零
  • X和Y在一起应该与V具有相同的数字

我提出了一个解决方案,

strV = sort(toString(V))
for factor <- pow(10, N/2) to sqrt(V)
    if factor divides V
        X <- factor
        Y <- V/factor
        if X and Y have trailing zeros
           continue
        checkStr = sort(toString(X) + toString(Y))
        if checkStr equals strV return true
Run Code Online (Sandbox Code Playgroud)

另一种可能的解决方案是置换由V表示的字符串并将其分成两半并检查它是否是吸血鬼号码.哪一个是最好的方法呢?

algorithm numbers number-theory

9
推荐指数
2
解决办法
2116
查看次数

确定(x ^ 2 + x + 1)^ n中的x ^ m项的系数是偶数或奇数

对于给定的整数,nm确定x^mterm 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并且我想在几秒钟内计算,因此您无法在线性时间内计算.

你有任何有效的算法吗?

algorithm math algebra number-theory mod

9
推荐指数
2
解决办法
656
查看次数

欧几里得算法对上限下的数对所采取的步数总和的快速算法

注意:这可能涉及大量的数论,但我在网上找到的公式只是一个近似值,所以我相信一个精确的解决方案需要计算机进行某种迭代计算。

我的目标是找到一种有效的算法(就时间复杂度而言)来解决大 n 值的以下问题:

令 R(a,b) 是欧几里德算法为找到非负整数 a 和 b 的 GCD 所采取的步数。即 R(a,b) = 1 + R(b,a%b),且 R(a,0) = 0。给定一个自然数 n,求所有 1 的 R(a,b) 之和<= a,b <= n。

例如,如果 n = 2,则解为 R(1,1) + R(1,2) + R(2,1) + R(2,2) = 1 + 2 + 1 + 1 = 5。

由于有 n^2 对对应于要加在一起的数字,无论 R 的效率如何,简单地为每一对计算 R(a,b) 不会比 O(n^2) 好。因此,为了提高为了算法的效率,更快的方法必须以某种方式一次计算多个值的 R(a,b) 的总和。我怀疑有一些属性可能有用:

  1. 如果 a = b,则 R(a,b) = 1
  2. 如果 a < b,则 R(a,b) = 1 + R(b,a)
  3. R(a,b) = R(ka,kb) …

algorithm time-complexity number-theory cumulative-sum

8
推荐指数
1
解决办法
204
查看次数

找出因素的总和

为什么这段代码会返回一个数字因子的总和?

在几个Project Euler问题中,您被要求计算因子的总和作为问题的一部分.在那里的一个论坛上,有人发布了以下Java代码作为查找总和的最佳方式,因为你实际上不需要找到个别因素,只需要找到主要因素(你不需要知道Java,你可以跳到下面的摘要):

public int sumOfDivisors(int n)
{
    int prod=1;
    for(int k=2;k*k<=n;k++){
        int p=1;
        while(n%k==0){
            p=p*k+1;
            n/=k;
        }
        prod*=p;
    }
    if(n>1)
        prod*=1+n;
    return prod;
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经尝试了很多次,我发现它有效.问题是,为什么?

说你因素100: 1,2,4,5,10,20,25,50,100.总和是217.主要因素分解是2*2*5*5.这个功能给你[5*(5+1)+1]*[2*(2+1)+1] = [25+5+1]*[4+2+1] = 217

保理8:1,2,4,8.总和是15.主要因素分解是2*2*2.这个功能给你[2*(2*(2+1)+1)+1]=15

该算法归结为(Fi用于表示因子F或F sub i的第i个索引):

return product(sum(Fi^k, k from 0 to Ni), i from 1 to m)
Run Code Online (Sandbox Code Playgroud)

其中m,唯一素因子Ni的数量是每个唯一因子在素数因子分解中出现的次数.

为什么这个公式等于因子的总和?我的猜测是,它等于通过分配属性的每个独特的素因子组合(即每个独特因子)的总和,但我不知道如何.

math sum factors number-theory

7
推荐指数
1
解决办法
1万
查看次数

如何在多个阵列中找到连续数?

我马上给出一个例子,现在假设我有3个数组a,b,c等

a = c(3,5)
b = c(6,1,8,7)
c = c(4,2,9)
Run Code Online (Sandbox Code Playgroud)

我必须能够在它们之间提取连续的三元组,例如,

c(1,2,3),c(4,5,6)
Run Code Online (Sandbox Code Playgroud)

但这仅仅是一个例子,我将拥有一个甚至超过10个数组的更大的数据集,因此必须能够找到连续的十个长度系列.

因此,任何人都可以提供算法,通常在'n'数组中找到连续的长度'n'系列.

我实际上在R中做这个东西,所以如果你用R代码你的代码它更可取.但是来自任何语言的算法都非常受欢迎.

arrays algorithm r permutation number-theory

7
推荐指数
2
解决办法
222
查看次数