zoukankan      html  css  js  c++  java
  • 转载 筛子算法之golang实现求素数解析

    package main
    
    import "fmt"
    
    // Send the sequence 2, 3, 4, ... to channel 'ch'.
    func generate(ch chan int) {
        for i := 2; ; i++ {
            ch <- i // Send 'i' to channel 'ch'.
        }
    }
    
    // Copy the values from channel 'in' to channel 'out',
    // removing those divisible by 'prime'.
    func filter(in, out chan int, prime int) {
        for {
            i := <-in // Receive value of new variable 'i' from 'in'.
            if i%prime != 0 {
                out <- i // Send 'i' to channel 'out'.
            }
        }
    }
    
    // The prime sieve: Daisy-chain filter processes together.
    func main() {
        ch := make(chan int) // Create a new channel.
        go generate(ch)      // Start generate() as a goroutine.
        for {
            prime := <-ch
            fmt.Print(prime, " 
    ")
            ch1 := make(chan int)
            go filter(ch, ch1, prime)
            ch = ch1
        }
    }




    这是一个求素数的程序,所谓素数就是除了1和自身以外,不能整除其他自然数的数,一个自然数如果不能被其它所有小于它的素数整除也称为素数,本例中就是用这些特性来求素数
    设一个从二到无穷大的自然数数据流,逐级递增,先求出最小的素数,拿到该素数作为筛子,然后筛出比筛子大的最小素数,把这个筛选出的素数再次当作筛子,以此类推...



    作者:hellodyp
    链接:https://www.jianshu.com/p/21e7e8c23090
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


  • 相关阅读:
    面试题总结
    h5c3新特性
    redis常用命令大全
    windows下挂载linux的nfs网络硬盘
    mysql之char、varchar、text对比
    Lua与C的交互
    通信模型socket
    程序编译流程
    区块链共识机制(POW、POS、DPOS等)的优缺点
    .net c#获取自定义Attribute
  • 原文地址:https://www.cnblogs.com/saolv/p/12019084.html
Copyright © 2011-2022 走看看