相关疑难解决方法(0)

F#中的Eratosthenes筛

我对纯粹功能性F#中的eratosthenes筛子的实施很感兴趣.我对实际筛子的实现感兴趣,而不是真正的筛子的天真功能实现,所以不是这样的:

let rec PseudoSieve list =
    match list with
    | hd::tl -> hd :: (PseudoSieve <| List.filter (fun x -> x % hd <> 0) tl)
    | [] -> []
Run Code Online (Sandbox Code Playgroud)

上面的第二个链接简要描述了一个需要使用多图的算法,据我所知,这在F#中是不可用的.给出的Haskell实现使用了一个支持insertWith方法的映射,我在F#功能映射中没有看到它.

有没有人知道将给定的Haskell映射代码转换为F#的方法,或者可能知道替代实现方法或筛选算法哪些有效且更适合功能实现或F#?

algorithm f# sieve-of-eratosthenes

35
推荐指数
5
解决办法
4799
查看次数

适用于非常大的质数的素数硬盘存储 - 阿特金筛选

我已经实施了AtkinSieve,它的工作效果非常接近100,000,000左右.除此之外,它因内存问题而崩溃.

在算法中,我想用基于硬盘的阵列替换基于内存的阵列.Python的"wb"文件函数和Seek函数可以解决问题.在我发明新轮子之前,有人可以提供建议吗?一开始就出现两个问题:

  1. 有没有办法将Atkin的Sieve"块"用于处理内存中的段,以及
  2. 有没有办法暂停活动并稍后再回来 - 建议我可以序列化内存变量并恢复它们.

我为什么要这样做?寻找娱乐和保持面条工作的老geezer.

python math primes sieve sieve-of-atkin

10
推荐指数
2
解决办法
289
查看次数

C#:如何使阿特金筛增量

我不知道这是否可能,但我只是想问一下。我的数学和算法技能有点让我失望:P

问题是我现在有这个类可以生成达到一定限制的素数:

public class Atkin : IEnumerable<ulong>
{
    private readonly List<ulong> primes;
    private readonly ulong limit;

    public Atkin(ulong limit)
    {
        this.limit = limit;
        primes = new List<ulong>();
    }

    private void FindPrimes()
    {
        var isPrime = new bool[limit + 1];
        var sqrt = Math.Sqrt(limit);

        for (ulong x = 1; x <= sqrt; x++)
            for (ulong y = 1; y <= sqrt; y++)
            {
                var n = 4*x*x + y*y;
                if (n <= limit && (n % 12 == 1 || n …
Run Code Online (Sandbox Code Playgroud)

c# algorithm primes sieve sieve-of-atkin

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