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

[擂台] 串珠素数问题

[复制链接]
 楼主| 发表于 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-11-22 01:29 , Processed in 0.025464 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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