小编kee*_*ing的帖子

SPOJ问题KPRIMES2

我是这个论坛的新手,并不太了解这个论坛的协议,所以请原谅我的无知.我的问题与spoj问题https://www.spoj.pl/problems/KPRIMES2/有关.我正在为这个问题获得超时限制.我认为这个程序的瓶颈正在产生10 ^ 9.可能有人建议如何改进这个筛子,更快的方式来生成素数或如何解决这个问题.这是我算法的草图

该程序生成2k + 1形式的所有素数,并将这些素数编码为数组a [i]的32位整数,其中未设置位代表primes.a [0]编码3,5,7 ....... 65 .a [1]编码67以后,依此类推.我有一个辅助数组bitcnt [],其中bitcnt [i]存储[0],[1],......... a [i]的未设置位的总和.我使用bitcnt进行二分搜索并找到第k个数字的位置.这里是函数的位解释.prime()函数生成素数,并且我将素数编码到数字[32位无符号整数]的位上.bitcnt数组存储数组a的未设置位的总和,用于二进制搜索目的.bsearchupper(int m)返回m lie的bitcnt索引.最后在main函数中,我存储了多少素数到m的上限并开始递减值直到我得到K.谢谢.

编辑:SPOJ的问题陈述

输入

一个整数,表示查询数Q(等于100000),Q行跟随,每个包含1到50000000之间的一个整数K(含).

产量

Q行与每个查询的答案:Kth素数.

输入:8 1 10 100 1000 10000 100000 1000000 10000000

产量:2 29 541 7919 104729 1299709 15485863 179424673

#include<cstdio>
#include<vector>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#define Lim 1000000000
using namespace std;
unsigned int a[(Lim>>6)+10],bitcnt[(Lim>>6)+10];
int bound;
void prime()
{

    int p_1,q_1,p_2,q_2,Ub=sqrt(Lim*1.0);
    for(int i=3;i<=Ub;i+=2)
    {
            p_1=(i-3)>>6,q_1=((i-3)>>1)&31; 
            if(!(a[p_1] & (1L<<q_1))) 
            for(int j=i*i;j<Lim;j+=i) 
               if(j&1) 
                {
                p_2=(j-3)>>6,q_2=((j-3)>>1)&31;
                a[p_2]|=(1L<<q_2);
                } …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm sieve-of-eratosthenes

8
推荐指数
1
解决办法
1071
查看次数

从维基百科下载pdf文件

维基百科在每篇文章中提供了一个链接(打印/导出的左侧),以PDF格式下载文章.我写了一个小的Haskell脚本,它首先获取Wikipedia链接并输出渲染链接.当我将渲染网址作为输入时,我得到空标记但是浏览器中的相同网址提供了下载链接.

有人可以告诉我如何解决这个问题?ideone上的格式化代码.

import Network.HTTP
import Text.HTML.TagSoup
import Data.Maybe

parseHelp :: Tag String -> Maybe String 
parseHelp ( TagOpen _ y ) = if any ( \( a , b ) -> b == "Download a PDF version of this wiki page" ) y 
                      then Just $  "http://en.wikipedia.org" ++   snd (   y !!  0 )
                   else Nothing


parse :: [ Tag String ] -> Maybe String
parse [] = Nothing 
parse ( x : xs ) 
   | isTagOpen x …
Run Code Online (Sandbox Code Playgroud)

tag-soup haskell http

6
推荐指数
1
解决办法
363
查看次数

并行矩阵乘法

我用par和编写了一个简单的并行矩阵乘法pseq.

运行此程序后,没有任何火花转换(火花:20(0转换,0修剪)).

我想听听你关于改进这个计划的意见.

还有关于在Haskell中学习并行编程的方法.

import Data.List
import Control.Parallel

parHelp :: ( Num a ) => [ a ] -> [ a ] -> a 
parHelp [] [] = 0
parHelp ( x : xs ) ( y : ys ) = ret where 
ret = par a ( pseq b ( a + b ) ) where 
        a = x * y 
        b = parHelp xs ys

helpMult :: ( Num a ) => [ a …
Run Code Online (Sandbox Code Playgroud)

parallel-processing haskell

6
推荐指数
1
解决办法
1180
查看次数

SPOJ问题Flibonakki时限超过

我试图在Haskell中解决这个问题,但是时间限制超过了.我应用了我所有的Haskell和数学技能来优化这一点,但都是徒劳的.有人可以建议我如何进一步优化此代码.序列F_3 + F_7 + F_11 .... + F_(4n + 3)= F_2n*F_(2n + 1).我使用O(log n)方法来计算斐波纳契数.

import Data.List
import Data.Maybe
import qualified Data.ByteString.Lazy.Char8 as BS

matmul :: [Integer] -> [Integer] -> Integer -> [Integer]
matmul [a,b,c] [d,e,f] m = [x,y,z] where
    y = (a*e + b*f) `mod` m
    z = (b*e + c*f) `mod` m
    x = y + z


powM ::[Integer] -> Integer -> Integer -> [Integer]
powM a n m | n == 1 = a 
   | n …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell

5
推荐指数
1
解决办法
894
查看次数

在Haskell中用同义词替换单词

我正在浏览这个剽窃探测器并试图在Haskell中编写一个程序,它将读取一个文件并用同义词替换它的一些单词.在Haskell有没有可用于此目的的字典?

此外,如果您有关于算法的任何输入或与此问题相关的任何其他输入,例如如何通过用同义词替换单词来避免更改语句的上下文,那么请发布它.

dictionary haskell plagiarism-detection

5
推荐指数
1
解决办法
313
查看次数

使用HOOPL进行数据流优化

我是Haskell程序员(我通常在Haskell中实现算法)并试图理解HOOPL库但我无法解码它.我没有编译器背景(目前正在学习Coursera和编译器:原理,技术和工具),如果你能建议我采用系统的方式来理解HOOPL库(前提条件是什么),那将会很棒.假设我有一个小的Haskell代码,我想在其上使用HOOPL应用数据流优化

add :: Int -> Int -> Int
add x y = z where
   x' = 1
   y' = 1 -- this will be dead code elimination 
   z = x' + 1 
Run Code Online (Sandbox Code Playgroud)

如何编写HOOPL代码来优化它.如果你能给出一些更好的例子并且原谅我,如果我听起来很愚蠢,那就太棒了.

compiler-construction haskell hoopl

5
推荐指数
1
解决办法
634
查看次数

使用ppx_deriving打印抽象语法树

有些人可以告诉我为什么这段代码没有编译.我试图使用ppx_deriving库打印抽象语法树.

type prog = command list
[@@deriving show]
and command =
   | Incv | Decv
   | Incp | Decp
   | Input  | Output
   | Loop of command list
   [@@deriving show]

let _ = Format.printf "%s" (show_prog ([Incv, Incv]))

hello:brainfuckinter mukeshtiwari$ ocamlbuild -package ppx_deriving.std  ast.byte
+ /Users/mukeshtiwari/.opam/4.02.1/bin/ocamlc.opt -c -I /Users/mukeshtiwari/.opam/4.02.1/lib/ppx_deriving -o ast.cmo ast.ml
File "ast.ml", line 10, characters 28-37:
Error: Unbound value show_prog
Command exited with code 2.
Compilation unsuccessful after building 2 targets (1 cached) in 00:00:00.
hello:brainfuckinter mukeshtiwari$ ocaml …
Run Code Online (Sandbox Code Playgroud)

ocaml abstract-syntax-tree

5
推荐指数
1
解决办法
756
查看次数

Haskell代码中的编译器错误

我正在尝试使用where子句编写椭圆曲线点加法.我收到编译器错误但是当我使用let in expression翻译相同的代码时,它工作正常.有人可以告诉我这段代码有什么问题.完整源代码[ http://hpaste.org/49174 ]
谢谢
Mukesh Tiwari

{--
--add points of elliptic curve using where clause getting compiler error
addPoints :: Elliptic -> Point -> Point -> Either Point Integer
addPoints _ Identity p_2 = Left p_2
addPoints _ p_1 Identity = Left p_1
addPoints ( Conelliptic a b n ) ( Conpoint x_p y_p ) ( Conpoint x_q y_q )  
    | x_p /= x_q =  case ( ( Conpoint x_r y_r ) , d ) of
                        ( _ …
Run Code Online (Sandbox Code Playgroud)

haskell elliptic-curve

2
推荐指数
1
解决办法
224
查看次数