标签: factorization

使用trampolining进行递归溢出

我正在尝试测试以下因子分解函数,但它正在为大量素数爆发:

(defn divides? [N n]
  (zero? (mod N n)))

(defn f-reduce [n f & {:keys [expt] :or {expt 0}}]
  (if (divides? n f) (f-reduce (/ n f) f :expt (inc expt))
                     (if (zero? expt) [n []] [n [f expt]])))

(defn _factors [n f known-fs]
  (let [[m fs] (f-reduce n f)]
    (if (> f (Math/sqrt m))
      (cond (and (empty? fs) (= m 1)) known-fs
            (empty? fs)               (concat known-fs [m 1])
            (= m 1)                   (concat known-fs [f (last fs)])
            true                      (concat known-fs …
Run Code Online (Sandbox Code Playgroud)

recursion primes clojure prime-factoring factorization

5
推荐指数
1
解决办法
100
查看次数

什么是找到数字最大素数的最佳方法?

我是编程的新手,我的一个朋友建议我应该对Euler项目进行练习以使其更好.我在问题3上遇到了问题:

"13195的主要因素是5,7,13和29. 600851475143中最大的主要因素是什么?"

现在这是我的解决方案:

class Program
{
    static void Main(string[] args)
    {
        long number = 600851475143;
        bool prime = true;

        for (long i = 3; i <= number; i++)
        {
            for (long n = 2; n < i; n++)
            {

                if (i % n == 0)
                {
                    prime = false;
                    break;
                }
            }

            if (prime)
            {
                if (number % i == 0)
                {
                    Console.WriteLine(i);

                }

            }
            prime = true;

        }
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,虽然我确实得到了正确的答案(这是6857),但我发现我的方法非常低效.如果您将运行我的代码,您将看到它仍将在超过2分钟之后运行...我的问题是如何为此编写更高效/更快的代码?

c# primes prime-factoring factors factorization

4
推荐指数
1
解决办法
2107
查看次数

Pollard rho整数分解

我试图在C/C++中实现Pollard Rho整数分解.Google在这里给我一个Java实现的问题.

我不太了解Java,所以我想到了这一点.我在C++中的实现适用于大多数情况但不是很少像我在那里使用的"9999".

我知道C++没有Biginteger类,所以我不能拥有它在JAVA中提供的全部功能但是我想要分解15位数就足够了 unsigned long long

请指出我的实施中有什么问题.

c c++ java math factorization

3
推荐指数
1
解决办法
2481
查看次数

Pollard Rho分解方法实现

每当我使用Pollard Rho分解方法对数字进行因子分解时,是否有必要在Pollard Rho分解之前检查它的素数?如果是,那么我必须实施Miller Rabin的素性测试或任何素性测试,每次我想要考虑任何数字而且我必须要处理强伪赝,这不是很复杂吗?有没有简单而又更快的方法来处理这个问题?(我在最多10位数的数字上使用这些测试)

algorithm primes factorization

3
推荐指数
1
解决办法
1745
查看次数

在Haskell中调用函数前缀与中缀

我一直想学习Haskell,所以最近我开始解决ProjectEuler问题.在编写以下分解代码时,我注意到调用(/ n)返回一段Float时间后(n `div`)返回一个Int.我认为中缀符号只是Haskell中的语法糖?有人可以解释发生了什么吗?我还要感谢任何意见/建议/改进,谢谢.

    import Data.List (sort)

    factor :: Int -> [Int]
    factor 0 = [1..]
    factor n =
        let f1 = [f | f <- [1..limit], n `mod` f == 0]
                where limit = ceiling $ sqrt $ fromIntegral n
            f2 = map (n `div`) f1   --vs. map (/ n) f1
        in sort $ f1 ++ f2
Run Code Online (Sandbox Code Playgroud)

haskell factorization

3
推荐指数
1
解决办法
1243
查看次数

Python分解功能导致不稳定的结果

def test_prime(n):
    q = True
    for p in range(2,n):  #Only need to check up to rootn for primes and n/2 for factors
        if int(n%p) is 0:         
            q = False
            print(p, 'and', int(n/p), 'are factors of ', n)    
    if q:
        print(n, 'IS a prime number!')
    else:
        print(n, 'IS NOT a prime number')
Run Code Online (Sandbox Code Playgroud)

我刚刚开始使用Python,我正在整理一些零碎的东西来消磨时间.我一直在玩质数测试,并有想法显示非素数的因素.我上面列出的函数似乎运行得很好,除了输出不一致.

例如,如果我设置n = 65432我得到...

2 and 32716 are factors of  65432
4 and 16358 are factors of  65432
8 and 8179 are factors of  65432
8179 and 8 are …
Run Code Online (Sandbox Code Playgroud)

python factorization

3
推荐指数
1
解决办法
364
查看次数

寻找600851475143中最大的素数?

我正试图从http://projecteuler.net解决问题3 .但是,当我运行程序时,没有打印出来.我究竟做错了什么?问题:600851475143的最大主要因素是什么?

public class project_3 
{
    public boolean prime(long x)   // if x is prime return true
    {
        boolean bool = false;

        for(long count=1L; count<x; count++)
        {
            if( x%count==0 )
            {
                bool = false;
                break;
            }
            else { bool = true; }
        }
        return bool;
    }

    public static void main(String[] args)
    {
        long ultprime = 0L;  // largest prime value
        project_3 object = new project_3();

        for(long x=1L; x <= 600851475143L; x++)
        {
            if( object.prime(x)==true )
            {
                ultprime = …
Run Code Online (Sandbox Code Playgroud)

java primes prime-factoring factors factorization

3
推荐指数
1
解决办法
7849
查看次数

简化Python迭代

每当我尝试解决一些数学问题,比如找到一定数量因素的特定产品,我就用Python做

for x in xrange(1,10):
    for y in xrange(1,10):
        for z in xrange(1,10):
           product = x * y * z
           if product == 36:
               print "factors : {0},{1},{2}".format(x,y,z)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,它非常简单并快速完成工作,但我想知道你们是否知道更简单或更简单的方法来编写它.关于如何做到这一点的任何想法,而不是使用那么多迭代或反复重复几乎相同的代码.这显然是有3个因素,但我添加的因素越多,代码越长,重复性越高.关于如何简化这类简单问题的代码的任何想法?谢谢

python product factorization

3
推荐指数
1
解决办法
114
查看次数

确定可以被分解为2 ^ p5 ^ q的数字集的算法

我正在尝试编写一个算法,该算法可以返回小于实例n的正整数集,并且可以将其分解为2 ^ p5 ^ q.我的数学不是最好的,所以我不知道如何确定一个数字是否可以用这种特定的形式分解...

任何帮助将非常感激 :)

algorithm math factorization

3
推荐指数
1
解决办法
91
查看次数

最快分解因子的最快方法是10 ^ 18

给定一个数字1 <= n <= 10^18,我如何将其最小化时间复杂度?

互联网上有很多帖子介绍如何找到主要因素,但是在特定情况下,它们都(至少从我所看到的情况)没有陈述它们的好处。

除了Eratosthenes的筛子之外,我还使用Pollard的rho算法:

  • 使用筛子,找到前10个7中的所有质数,然后n尽可能除以这些质数。
  • 现在,使用Pollard的rho算法尝试查找其余素数,直到n等于1。

我的实现:

#include <iostream>
#include <vector>
#include <cstdio>
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

typedef unsigned long long ull;
typedef long double ld;
typedef pair <ull, int> pui;
#define x first
#define y second
#define mp make_pair

bool prime[10000005];
vector <ull> p;

void initprime(){
    prime[2] = 1;
    for(int i = 3 ; i < 10000005 ; i += 2){ …
Run Code Online (Sandbox Code Playgroud)

algorithm primes sieve-of-eratosthenes prime-factoring factorization

3
推荐指数
1
解决办法
1639
查看次数