六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

Section 1.2

[复制链接]

升级  20%

20

主题

20

主题

20

主题

秀才

Rank: 2

积分
80
 楼主| 发表于 2013-1-27 04:44:52 | 显示全部楼层 |阅读模式
1.9 略
1.10 略
1.11
{- recursive stylef3' n     | n<3 = n    | otherwise = f3(n-1) + 2*f3(n-2) + 3*f3(n-3)-}    getBegin n = n-(fromIntegral t)-1    where t = floor (n-3) ::Integerf3 n    | n<3 = n    | otherwise = f3_iter b (b-1) (b-2) (n-2)                    where b = getBegin n                          f3_iter a _ _ 0 = a                          f3_iter a b c k = f3_iter (a+2*b+3*c) a b (k-1) 1.12
pascal :: Integer -> Integer -> Integerpascal n k    | k==1 = 1    | n==k = 1    | k<n  = pascal (n-1) k + (pascal (n-1) (k-1))    | otherwise = error "Invalid!" 1.13 略
 1.14 略
 1.15 略
 1.16
-- Iterative version of fast-expfast_exp :: (Num a)=> a -> Integer -> afast_exp b n = exp_iter b n 1    where exp_iter _ 0 a = a          exp_iter b n a = if (even n ) then exp_iter (b*b) (n `div` 2) a                           else exp_iter b (n-1) (a*b) 1.17 略
 1.18
fast_mult :: Integer -> Integer -> Integerfast_mult a b = fast_iter a b 0    where fast_iter _ 0 s = s          fast_iter a b s = if (even b) then fast_iter (a*2) (b `div` 2) s                            else fast_iter a (b-1) (s+a) 1.19
fast_fib :: Integer -> Integerfast_fib n = fast_iter 1 0 0 1 n    where fast_iter _ b _ _ 0 = b          fast_iter a b p q count =             if (even count) then                fast_iter a b (p*p+q*q) (p*q+q*p+q*q) (count `div` 2)            else                fast_iter (b*q+a*q+a*p) (b*p+a*q) p q (count-1)                fib :: Integer -> Integerfib 0 =1fib 1 =1fib n = fib (n-1) + fib (n-2)           1.20 略
  1.21
smallestDivesor :: Integer -> IntegersmallestDivesor n = divTry 2 n    where divTry a n            | a*a > n  = n            | n `mod` a ==0 = a            | otherwise = divTry (a+1) n            main :: IO ()main = do mapM_ (putStrLn.show.smallestDivesor) [199,1999,19999]        1.22 略
 1.23
smallestDivesor' :: Integer -> IntegersmallestDivesor' n = divTry 2 n    where divTry a n            | a*a > n  = n            | n `mod` a ==0 = a            | otherwise = divTry (next a) n          next a = if a==2 then 3 else (a+2) 1.24~1.28 略 质数问题,以后总结
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表