zoukankan      html  css  js  c++  java
  • [projectEuler.net]12

    求一个数的因子的数量。
    X=a^n*b^m*c^p  will have (n + 1)(m + 1)(p + 1) factors.//abc都是质因子
    
    28=2^2*7  will have 3*2 = 6 factors   
    因为: 
    28的质因子是 2 2  7 ;
    28的所有因子必是由这些质因子构成;
    构造这些因子时:2可以取 0 、1、 2 个。7可以取0 、1 个;
    所以28因子的数量是:3×2=6 。

    http://mathforum.org/library/drmath/view/55843.html

    http://www.cnblogs.com/zhouyinhui/archive/2011/02/16/1955691.html

     题目要求找到第一个因子数大于500的triangle number(简写tn) (第i的tn 就是 1+2+3+...+i)

     尴尬的是一开始审题不认真,以为要找到一个因子是等于500的,因为因子是不按一定的规律,比如找6个因子的数很快就是28,但是(随便说的数字)找7个因子的数可能结果是99999  虽然因子数差1但是实际数字跨越可能很大。

    haskell实现:

    使用了Data.Numbers.Primes库 

    module P12 where

    import Data.Numbers.Primes
    import Data.List

    (|>) f g =(g)$(f)

    zipSame' ::[Integer]->[[Integer]]->[[Integer]]
    zipSame' [] rs=rs
    zipSame' (x:xs) rs'@((r:rs):rss) =
    if x == r then zipSame' xs ((x:r:rs):rss)
    else zipSame' xs ([x]:rs')
    --zipSame 假设相同的元素是连续的。因为primes函数产生的素数是排好序的
    zipSame :: [Integer]->[[Integer]]
    zipSame (x:xs) =zipSame' xs [[x]]
    zipSame [] = [[0]]

    --mapCount目的是求出嵌套的list中子list的长度,以[数量]形式返回
    --e.g.[[2,2,2]] >> [3]
    mapCount ::[[Integer]]->[Integer]
    --zipSame 假设相同的元素是连续的。因为primes函数产生的素数是排好序的mapCount xs =
    mapCount xs =
    map (\ a -> toInteger $ length a) xs

    --计算给定数的因子的数量
    factorsCount :: Integer ->Integer
    factorsCount x =
    (mapCount $ zipSame $ primeFactors x)
    |> foldl (\ sum x -> sum*(x+1) ) 1

    triangleNumbers::[Integer]
    triangleNumbers =
    let x =[1..] in
    map (\ a ->truncate $ fromInteger ((1+a)*a) / fromInteger 2 ) x


    tfc =
    map (\ i-> (i,factorsCount i)) triangleNumbers

    fstOverfc::[(Integer,Integer)]->(Integer,Integer)
    fstOverfc (x:[]) =x
    fstOverfc (x@(i,fc):xs)
    | fc >=500 = x
    | otherwise =fstOverfc xs



  • 相关阅读:
    英雄大乱斗
    深浅拷贝(copy)
    myleecode
    代码量简单统计
    pandas 模块 05
    matplotlib 模块 07
    KVC 和KVO浅谈
    iOS开发中懒加载的使用和限制
    关于空白模板插件的使用
    UIImageC处理
  • 原文地址:https://www.cnblogs.com/jiangzhen/p/2332529.html
Copyright © 2011-2022 走看看