找回密码
 欢迎注册
楼主: 无心人

[擂台] 串珠素数问题

[复制链接]
 楼主| 发表于 2008-11-24 11:17:41 | 显示全部楼层
import Primes

  readInt :: IO Int
  readInt = readLn

  getBlock b 0 = [10*a + b | a <- [0..10^(b-1)-1], b <- [1,3,7,9]]
  getBlock b 1 = [100*a + 10*b + c | a <- [0..10^(b-2)-1], b <- [1..9], c <-[1,3,7,9]]
  getBlock b p = [10^(p+1)*a + 10^p*b + 10*c + d | a <- [0..10^(b-1-p)-1], b <- [1..9], c <- [0..10^(p-1)-1], d <- [1,3,7,9]]                                 
                                                   
  multiBlock b n p = (p \`mod\` 10^(n \`mod\` b)) * 10^(b * (n \`div\` b))+ fromIntegral(sum (take (n \`div\` b) (iterate (10^b*) p)))

  isczPrime b n = [(ns, pp) | ns <- [b+1..n],
                              ns \`mod\` b /= 0,
                              let pps = map (multiBlock b ns) (getBlock b ((n \`mod\` b)-1)),
                              pp <-  pps,
                              isPrime pp
                            ]
           
  main = do
           putStrLn "Input Digits: "
           n <- readInt
           putStrLn "Input Block Size: "
           b <- readInt
           print (isczPrime b n)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-24 12:39:09 | 显示全部楼层
这是 C++ 代码,
请先安装 HugeCalc 算法库,而后编译运行,
可以运行在任何 32 位或 64 位 windows 下。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-24 16:51:53 | 显示全部楼层
21#程序改好了
不知道谁能写个别的语言的
相互印证
下面是编译后的程序
isczPrimen.rar (256.75 KB, 下载次数: 5)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-24 21:41:17 | 显示全部楼层
原帖由 无心人 于 2008-11-24 16:51 发表
21#程序改好了
不知道谁能写个别的语言的
相互印证
下面是编译后的程序
595


下载了你的程序,可惜结果一闪而过,无法保留。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-25 07:59:49 | 显示全部楼层
呵呵
没设定保存到文件

不过,很容易写保存程序
就增加一句

你重定向到文件吧

isczPrimen > czPrimes.txt
呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-25 08:08:42 | 显示全部楼层
我在 WinXP cmd 下,无论用 > 还是 >> 到文件,都不能成功。
因为无法输入参数了,得到一个0字节空文件。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-25 08:17:59 | 显示全部楼层
不会的,不过输入数字参数需要注意。
比如程序名为test.exe,程序需要参数10,那么可以采用命令
test.exe 10 1>out
其中1>out表示将标准输出重定向到文件out.
如果省略了1而且10和>之间没有留空格,那么命令行会将数字10当成文件句柄从而没有输入参数了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-25 08:36:44 | 显示全部楼层
学了一招。

但用在无心人提供的程序仍然不灵,
可能是他输入输出代码非标准问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-25 08:40:26 | 显示全部楼层

可是我这里可以啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-11-25 08:45:23 | 显示全部楼层
import Primes

  readInt :: IO Int
  readInt = readLn

  getBlock b 0 = [10*a + b | a <- [0..10^(b-1)-1], b <- [1,3,7,9]]
  getBlock b 1 = [100*a + 10*b + c | a <- [0..10^(b-2)-1], b <- [1..9], c <-[1,3,7,9]]
  getBlock b p = [10^(p+1)*a + 10^p*b + 10*c + d | a <- [0..10^(b-1-p)-1], b <- [1..9], c <- [0..10^(p-1)-1], d <- [1,3,7,9]]  
                    
  multiBlock b n p = (p \`mod\` 10^(n \`mod\` b)) * 10^(b * (n \`div\` b))+ fromIntegral(sum (take (n \`div\` b) (iterate (10^b*) p)))

  isczPrime b n = [(ns, pp) | ns <- [b+1..n],
                              ns \`mod\` b /= 0,
                              let pps = map (multiBlock b ns) (getBlock b ((ns \`mod\` b)-1)),
                              pp <-  pps,
                              isPrime pp
                            ]
           
  main = do
           putStrLn "Input Digits: "
           n <- readInt
           putStrLn "Input Block Size: "
           b <- readInt
           let result = isczPrime b n
           let fileName = "P" ++ show(n) ++ "_" ++ show(b) ++ ".TXT"
           writeFile fileName (show result)


=============================
重新编译的,保存到文件
isczPrimen.rar (267.75 KB, 下载次数: 1)

本帖最后由 无心人 于 2008-11-25 09:22 编辑
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 22:25 , Processed in 0.047048 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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