• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coreBugZJ

            此 blog 已棄。

            SPOJ 2,Prime Generator

            SPOJ Problem Set (classical)

            2. Prime Generator

            Problem code: PRIME1

            Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate all prime numbers between two given numbers!

            Input

            The input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.

            Output

            For every test case print all prime numbers p such that m <= p <= n, one number per line, test cases separated by an empty line.

            Example

            Input:
            2
            1 10
            3 5
            Output:
            2
            3
            5
            7
            3
            5
            
            Warning: large Input/Output data, be careful with certain languages (though most should be OK if the algorithm is well designed)
            Added by: Adam Dzedzej
            Date: 2004-05-01
            Time limit: 6s
            Source limit: 50000B
            Languages: All except: PERL 6







            分析:就是判斷質數,預先開一個 35000 (其平方大于 n 的最大值)內的質數表。。。


            C語言源程序:

             1#include <stdio.h>
             2#include <string.h>
             3
             4#define  L  35000
             5int prime[ L ], nprime;
             6
             7void initPrime() {
             8        int i, j;
             9        memset( prime, 0sizeof(prime) );
            10        nprime = 0;
            11        for ( i = 2; i < L; ++i ) {
            12                if ( prime[ i ] == 0 ) {
            13                        prime[ nprime++ ] = i;
            14                        for ( j = i + i; j < L; j += i ) {
            15                                prime[ j ] = 1;
            16                        }

            17                }

            18        }

            19        prime[ nprime++ ] = L;
            20}

            21
            22int isPrime( int n ) {
            23        int i = 0;
            24        if ( n == 2 ) {
            25                return 1;
            26        }

            27        while ( (prime[i]*prime[i]<=n) && (n%prime[i]!=0) ) {
            28                ++i;
            29        }

            30        return n % prime[ i ] != 0;
            31}

            32
            33int main() {
            34        int td, a, b;
            35        initPrime();
            36        scanf( "%d"&td );
            37        while ( td-- > 0 ) {
            38                scanf( "%d%d"&a, &b );
            39                if ( a < 2 ) {
            40                        a = 2;
            41                }

            42                while ( a <= b ) {
            43                        if ( isPrime( a ) ) {
            44                                printf( "%d\n", a );
            45                        }

            46                        ++a;
            47                }

            48                if ( td > 0 ) {
            49                        printf( "\n" );
            50                }

            51        }

            52        return 0;
            53}

            54



            匯編源程序:

              1; SPOJ 2
              2
              3section  .bss
              4        prime : resd 35000
              5        nPrime : resd 1
              6        outBuf : resb 20000000
              7        nOutBuf : resd 1
              8
              9section .text
             10        global _start
             11
             12_start : 
             13        mov eax, outBuf
             14        mov [nOutBuf], eax
             15        call initPrime
             16        call inInt
             17        push eax
             18CASE : 
             19        call inInt
             20        dec eax
             21        push eax
             22        call inInt
             23        mov ebx, eax
             24        pop eax
             25        push ebx
             26        push eax
             27LOOP : 
             28        mov eax, [esp]
             29        inc eax
             30        mov [esp], eax
             31        call isPrime
             32        test ecx, ecx
             33        jz SKIP
             34        mov eax, [esp]
             35        call outInt
             36        call outLn
             37SKIP : 
             38        mov eax, [esp]
             39        mov ebx, [esp+4]
             40        cmp eax, ebx
             41        jne LOOP
             42        pop eax
             43        pop ebx
             44        pop eax
             45        dec eax
             46        test eax, eax
             47        jz EXIT
             48        push eax
             49        call outLn
             50        jmp CASE
             51EXIT : 
             52        call flushOutBuf
             53        mov eax, 1
             54        mov ebx, 0
             55        int 0x80
             56
             57; eax = inInt
             58inInt : 
             59        sub esp, 8
             60        xor eax, eax
             61        mov [esp], eax
             62    L1 : 
             63        mov eax, 3
             64        mov ebx, 0
             65        mov ecx, esp
             66        add ecx, 4
             67        mov edx, 1
             68        int 0x80
             69        xor eax, eax
             70        mov al, byte [ecx]
             71        cmp al, '0'
             72        jb  L2
             73        cmp al, '9'
             74        ja L2
             75        mov ebx, eax
             76        sub ebx, '0'
             77        mov ecx, 10
             78        mov eax, [esp]
             79        xor edx, edx
             80        mul ecx
             81        add eax, ebx
             82        mov [esp], eax
             83        jmp L1
             84    L2 : 
             85        mov eax, [esp]
             86        test eax, eax
             87        jz L1
             88        add esp, 8
             89        ret
             90
             91out eax
             92outInt : 
             93        mov ecx, esp
             94        mov ebx, esp
             95        sub esp, 64
             96        push ecx
             97        mov ecx, 10
             98    L3 : 
             99        test eax, eax
            100        jz L4
            101        xor edx, edx
            102        div ecx
            103        add edx, '0'
            104        dec ebx
            105        mov byte[ebx], dl
            106        jmp L3
            107    L4 : 
            108        mov eax, [nOutBuf]
            109        pop edx
            110    OIB : 
            111        cmp ebx, edx
            112        jnb OIE
            113        cmp eax, nOutBuf
            114        jb OISF
            115        mov [nOutBuf], eax
            116        push ebx
            117        push edx
            118        call flushOutBuf
            119        pop edx
            120        pop ebx
            121        mov eax, [nOutBuf]
            122    OISF : 
            123        mov cl, byte[ebx]
            124        mov byte[eax], cl
            125        inc eax
            126        inc ebx
            127        jmp OIB
            128    OIE : 
            129        mov [nOutBuf], eax
            130        add esp, 64
            131        ret
            132
            133outLn : 
            134        mov eax, [nOutBuf]
            135        cmp eax, nOutBuf
            136        jb OLE
            137        call flushOutBuf
            138    OLE :
            139        mov eax, [nOutBuf]
            140        mov byte [eax], 0xA
            141        inc eax
            142        mov [nOutBuf], eax
            143        ret
            144
            145initPrime :
            146        mov eax, prime
            147    IB : 
            148        cmp eax, nPrime
            149        jnb IE
            150        mov dword[eax], 0
            151        add eax, 4
            152        jmp IB
            153    IE : 
            154        mov eax, prime
            155        mov ebx, eax
            156        add eax, 8
            157    SB : 
            158        cmp eax, nPrime
            159        jnb SE
            160        mov ecx, [eax]
            161        add eax, 4
            162        test ecx, ecx
            163        jnz SB
            164        mov ecx, eax
            165        sub ecx, 4
            166        sub ecx, prime
            167        shr ecx, 2
            168        mov [ebx], ecx
            169        add ebx, 4
            170        mov edx, eax
            171        sub edx, 4
            172        mov ecx, edx
            173        sub edx, prime
            174        add ecx, edx
            175    SM : 
            176        cmp ecx, nPrime
            177        jnb SB
            178        mov dword [ecx], 1
            179        add ecx, edx
            180        jmp SM
            181    SE : 
            182        mov [nPrime], ebx
            183        ret
            184
            185; ecx = isPrime( eax )
            186isPrime :
            187        push eax
            188        cmp eax, 2
            189        jb IPN
            190        mov ebx, prime
            191    IPB : 
            192        cmp ebx, [nPrime]
            193        jnb IPI
            194        mov eax, [ebx]
            195        mov ecx, eax
            196        xor edx, edx
            197        mul ecx
            198        mov edx, [esp]
            199        cmp eax, edx
            200        ja IPI
            201        mov eax, edx
            202        add ebx, 4
            203        xor edx, edx
            204        div ecx
            205        test edx, edx
            206        jnz IPB
            207    IPN : 
            208        xor ecx, ecx
            209        jmp IPE
            210    IPI :
            211        mov ecx, 1
            212    IPE : 
            213        pop eax
            214        ret
            215
            216; flush out buffer
            217flushOutBuf :
            218        mov eax, outBuf
            219        mov ebx, [nOutBuf]
            220        cmp eax, ebx
            221        jnb FOBE
            222        mov eax, 4
            223        mov ebx, 1
            224        mov ecx, outBuf
            225        mov edx, [nOutBuf]
            226        sub edx, outBuf
            227        int 0x80
            228        mov eax, outBuf
            229        mov [nOutBuf], eax
            230    FOBE : 
            231        ret
            232
            233

            posted on 2011-04-01 18:45 coreBugZJ 閱讀(1672) 評論(3)  編輯 收藏 引用 所屬分類: Assemble

            Feedback

            # re: SPOJ 2,Prime Generator 2011-04-01 20:01 ktprime

            計算區間太小不能顯示篩法的威力
            我的程序計算長度為10^9也不到一秒
            segment cache size = 62 k : 1929600
            thread 1 is finished
            PI(1000000000) = 50847534, time use 267.13 ms

            [command or number] : e12 e9
            segment cache size = 511 k : 15724800
            init SegOffset time use 2 ms, cache size = 511 k
            PI[1000000000000, 1001000000000] = 36190991, time use 849.76 ms

            [command or number] : e16 e9
            init SegOffset time use 167 ms, cache size = 511 k
            PI[10000000000000000, 10000001000000000] = 27153205, time use 2544.52 ms
              回復  更多評論   

            # re: SPOJ 2,Prime Generator 2011-04-04 08:34 coreBugZJ

            @ktprime
            表示仰慕!這個題目數據規模小,就簡單化處理了  回復  更多評論   


            久久久国产精品亚洲一区| 久久综合给合久久狠狠狠97色69| 久久亚洲国产中v天仙www| 国内精品久久久久久久97牛牛| 久久97精品久久久久久久不卡| 久久久久久狠狠丁香| 久久有码中文字幕| 少妇无套内谢久久久久| 久久亚洲AV成人无码国产| 国产免费福利体检区久久 | 久久精品一区二区三区AV| 日产精品久久久久久久性色| 精品国产乱码久久久久久浪潮 | 精品久久久久久亚洲精品| 精品国产一区二区三区久久蜜臀| 久久精品国产亚洲αv忘忧草 | 久久久精品久久久久特色影视| 伊人热热久久原色播放www| 精品一区二区久久| 99精品久久久久久久婷婷| 久久精品国产国产精品四凭| 精品久久久久久中文字幕人妻最新 | 欧美日韩精品久久久免费观看| 久久精品国产99久久无毒不卡 | 欧美成a人片免费看久久| 狠狠色婷婷综合天天久久丁香| 亚洲欧美伊人久久综合一区二区| 国产激情久久久久影院老熟女免费| 久久人爽人人爽人人片AV| 武侠古典久久婷婷狼人伊人| 99久久成人18免费网站| 色综合色天天久久婷婷基地| 久久w5ww成w人免费| 久久国产乱子伦免费精品| 久久久久久精品免费免费自慰| 国产精品久久久久a影院| 亚洲欧美精品一区久久中文字幕| 久久精品国产亚洲5555| 久久国产热这里只有精品| 久久亚洲国产精品123区| 久久久精品久久久久特色影视|