首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从素数生成看Haskell的简洁性

最近有空就在看Haskell,真是越看越觉得这个语言有意思。在知乎(原回答@阅千人而惜知己的)找到了一份很有意思的求素数代码,非常简洁,我觉得很能体现这个语言的特点。...primes = sieve [2..] sieve (p:xs) = p : sieve [x| x <- xs , x `mod` p /=0 ] 其实本质思想就是Eratosthenes筛法。...核心函数就是sieve,大致处理过程是这样:读入一个列表,并取出第一个元素p。然后筛选出不能被p整除的剩余数字,递归求解。这里提及一下,[2..]是Haskell列表的一个神奇的特性,即支持无限列表。...这个Haskell的lazy特性有很大的关系。...的确,在处理诸如递归这种问题上,FP总是能用短小精悍的代码在众多语言中脱颖而出。

44210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    埃氏筛法

    限制条件n≤106 如果要对许多整数进行素性测试,用埃氏筛法比较好 埃氏筛法原理:先将2到n范围内的所有整数写下来。其中最小的数字2是素数。将表中所有2的倍数都划去。 ...表中剩余的最小数字是3,它不能被更小的数整除,所以是素数。再将表中所有3的倍数都划去。  依次类推,如果表中剩余的最小数字是m时,m就是素数。然后将表中的所有m的倍数都划去。...int sieve(int n) { int p = 0; is_prime[0] = is_prime[1] = false; for (int i...return p; } // p记录了素数的个数,is_prime数组记录了测试范围每个数字是不是素数,prime数组记录每个素数 public static void main...Scanner cin = new Scanner(System.in); int n = cin.nextInt(); cin.close(); int t = sieve

    24520

    异或性质的应用

    ---- 异或的技巧用的好还是很有用的。 原题链接:EOJ3329 给你N个数,输出满足异或和是质数的子集个数(允许有重复元素),答案可能很大,输出模 1e9+7 后的结果。...[9025]; void sieve( ) { memset(prime, true, sizeof(prime)); prime[0]=prime[1]=false;...LL dp[2][8192+17]; int main(int argc, char *argv[]) { sieve(); int n,x = 0 ; cin>>n;...dp【i】【j】表示从前i个不同的数中组成的所有集合中,能使得异或和的结果为j的集合个数(注意这里第i个数可以一个都不取)。为减小空间还用到了滚动数组。...知识点补充: a^b^b = a , 也就是说,异或是可以抵消的,放到这里来说,假如我想知道x^a = b中的x,那么我只需要把b再^一下a就行了,这就是转移的关键.

    41210

    HTTP状态码解析:在Haskell中判断响应成功与否

    在互联网的世界里,HTTP状态码是服务器与客户端之间通信的一种语言。它们告诉我们请求是否成功,或者遇到了什么问题。在进行网络编程时,正确地解析和处理这些状态码是至关重要的。...Haskell中的HTTP请求Haskell是一种静态类型的纯函数式编程语言,它提供了强大的功能来处理数据和类型。...在Haskell中,我们可以使用Network.HTTP.Conduit库来发送HTTP请求。这个库提供了一个高级的接口来处理HTTP请求和响应。...安装必要的库首先,确保你的Haskell环境已经安装了Network.HTTP.Conduit库。...statusIsSuccessful是一个便利的函数,它检查状态码是否在200到299的范围内。处理不同的状态码在实际应用中,我们可能需要根据不同的状态码执行不同的操作。

    47710

    笔记 Lab1: Unix utilities | Unix 实用工具

    练手题,记得在 Makefile 中将 sleep 加入构建目标里。...sieve using pipes....是*父进程*的输入管道,子进程用不到,关掉 sieve(pright); // 子进程以父进程的输出管道作为输入,开始进行下一个 stage 的处理。...注意:这里无法等待子进程的子进程,只能等待直接子进程,无法等待间接子进程。在 sieve() 中会为每个 stage 再各自执行 wait(0),形成等待链。...解决方法有两部分: 关闭管道的两个方向中不需要用到的方向的文件描述符(在具体进程中将管道变成只读/只写)原理:每个进程从左侧的读入管道中只需要读数据,并且只需要写数据到右侧的输出管道,所以可以把左侧管道的写描述符

    1.2K30
    领券