10 2013 - informatics.smg.bginformatics.smg.bg/uploads/Nakov-Dobrikov-Programming++Algorithms... ·...

740
Скъпи читатели, Поради постоянното изчерпване на книгата и трудностите с намирането й в мрежата за разпространение решихме да ви направим малък „подарък“, като публикуваме книгата безплатно в електронен вид (лицензът за рапространение се намира на страница 2). С пожелание за много успехи, 10 февруари 2013 Панайот и Преслав За контакти с нас (авторите): Уеб сайт на книгата: http://www.programirane.org Facebook група: http://www.facebook.com/groups/168112146541301

Transcript of 10 2013 - informatics.smg.bginformatics.smg.bg/uploads/Nakov-Dobrikov-Programming++Algorithms... ·...

  • ,

    ,

    ( 2).

    , 10 2013

    ():

    : http://www.programirane.org

    Facebook : http://www.facebook.com/groups/168112146541301

    http://www.programirane.org/http://www.facebook.com/groups/168112146541301

  • 1 - , 2 740

    : , 2012.

    , , .

    .

    .

    = ++;

    pdf , , ,

    .

    , .

    ,

    pdf .

  • ............................................................................................................................. 3

    .......................................................................... 13

    ........................................................................... 15

    0 , , 17 0.1. .................................... 18

    0.1.1. - ................................................................................... 18 0.1.2. .................................................................... 19 0.1.3. ................................................................... 20 0.1.4. ............................................................................... 20 0.1.5. ...................................................................................................... 21 0.1.6. ...................................................................... 21 0.1.7. ........................................................... 22

    0.2. ................................................................................................................ 23 0.3. ................................................................................................... 24

    0.3.1. ............................................................................. 24 0.3.2. ......................................................................................... 25 0.3.3. ................................................................................................. 25 0.3.4. .................................................................................................................... 26

    0.4. = ++........................................................................................... 26 0.4.1. ................................................................................ 26 0.4.2. ................................................................... 27 0.4.3. C? .......................................................................................................................... 28 0.4.4. ............................................................................. 29

    0.5. ........................................................................................................................... 29 ................................................................................................................................. 29 0.5.1. ................................................................................................................ 29 0.5.2. ........................................................................................................... 30 0.5.3. .................................................................................................... 30

    1 ...................................................................... 33 1.1. ........................................................... 33

    1.1.1. .............................................................................. 33 - ...........................................................................................................................33 - ....................................................................................................................................35 - . ...................................37 - ...........................................................................................................38 - , , n- ............................................................................................39 - . ........................................................................................40 - ...............................................................................................................................41

    1.1.2. ........................................................... 43 1.1.3. ................................................................................................................... 44

    - ................................................................................45 - . ...............................................47 - ..............................................................................50 - , ........................................51

  • 4

    1.1.4. ...................................................................................... 52 - .................................................................................................................52 - . .....................................................................................54

    1.1.5. , . ........................... 56 1.1.6. ................................................................................ 59

    - p- .........................................................61 - p- . .......................63

    1.1.7. .................................................................................................................. 65 - .............................................................65 - ....................................................................66

    1.2. ............................................................................................................ 67 1.2.1. ....................................................................................................................... 68 1.2.2. ...................................................................................................... 69 1.2.3. - . ........................................................ 74 1.2.4. - ............................................................................................... 76 1.2.5. ....................................... 77

    1.3. ................................................................................ 80 1.3.1. ..................................................................................................................... 80

    - ...........................................................................................................................81 - .......................................................................................................84 - ...................................................................................................86

    1.3.2. .......................................................................................................................... 86 - , .............................................................................................................86 - .............................................................................................................................88

    1.3.3. ..................................................................................................................... 90 1.3.4. ......................................................................................................... 92

    - ...........................92 - .........................93 - ...........................94

    1.3.5. ............................................................................................. 96 - .....................................................................................................96

    1.4. ................................................................................... 97 1.4.1. ............................................................................................ 99 1.4.2. ............................................................................................... 99 1.4.3. O(F): ..........................................................................................100 1.4.4. (F): .........................................................................................102 1.4.5. (F): .........................................................................................103 1.4.6. ..................................................................105 1.4.7. ..........................................................................106 1.4.8. ..................................................................107

    - ....................................................................................................... 107 - ....................................................................................... 107 - ................................................................................................ 107 - if- ................................................................................................................... 107 - ................................................................................................................................. 108 - .................................................................................................................. 108 - ....................................................................................... 109 - ................................................................................................... 110 - ............................................................................................................................ 110

    1.4.9. .....................................................................................112 - ............................................................. 112

  • 5

    - .............................................................. 114 - ..................................................................................... 114

    1.4.10. ........................................................117 - .................................................................................................. 117 - .................................................................................................... 118 - ............................................................................................................... 118

    1.4.11. ..............................................................120 1.5. ...............................................................................................................120

    1.5.1. ........................................................................................................120 1.5.2. ..................................................................................................................133

    - , , .................................................................................... 133 - .................................................................................... 137 - ....................................................................................................... 138

    2 ...............................................143 2.1. , , ........................................................................................................144

    - .................................................................................................................................... 145 - ............................................................................................................................... 146 - ..................................................................................................................................... 147

    2.1.1 () ..................................................................147 - .................................................................................................................................... 147 - ............................................................................................................................... 149

    2.1.2 () .............................................................................151 - ....................................................................................................... 152 - ........................................................................................................ 153 - , ........................................................... 153 - , ........................................................... 154 - ....................................... 154 - , ................................................................ 155

    2.2. ................................................................................................................158 - ..................................................................................................... 163 - ..................................................................................................... 164 - .................................................................................. 164 - ......................................................................................................................... 168

    2.3. ........................................................................................................169 2.3.1. . - .............................................................................172 2.3.2. B- ......................................................................................................................174

    2.4. - ........................................................................................................................176 - - ..................................................................................................................... 176 - ............................................................................................................................. 177

    2.4.1. - .............................................................................................178 - ................................................................... 178 - .............................................................................................. 178 - - ................................................................................. 179 - - .......................................................... 179 - - .............................................................................. 180

    2.4.2. .......................................................................................................184 - ............................................................................................................184

    - ............................................................................................................. 184 - ...................................................................................................... 185 - .............................................................................................................. 185

    - ..............................................................................................................185

  • 6

    - ........................................................................................ 185 - .................................................................................................. 186

    2.4.3. - .......................................................................................186 2.5. ...............................................................................................................192

    2.5.1. ........................................................................................................192 2.5.2. ..................................................................................................................196

    3 ...........................................................................................................199 3.1. ................................................................................................200

    3.1.1. .................................................................................................200 3.1.2. ...........................................................................................201 3.1.3. . .............203 3.1.4. ....................................................................................................206 3.1.5. .............................................................................................207 3.1.6. ...........................................................................................208 3.1.7. .....................................................................213 3.1.8. ........................................................................................215 3.1.9. .........................................................................216 3.1.10. .....................219

    3.2. ......................................................................................221 3.2.1. ......................................................................................221 3.2.2. ................................................................................................223 3.2.3. ..................................................................................................226 3.2.4. .....................................................................................229 3.2.5. ......................................................................................232

    3.3. ........................................................................................................233 3.3.1. ...............................................................................235 3.3.2. .................................................................................236 3.3.3. ...............................................................................................237 3.3.4. ........................................................237 3.3.5. ..............................................................................................................237 3.3.6. .........................................................................................................238 3.3.7. .........................................................................238 3.3.8. - ...............................................................239 3.3.9. - .............................................................................239 3.3.10. ...............................................................................................239

    3.4. ...............................................................................................................240 3.4.1. ........................................................................................................240 3.4.2. ..................................................................................................................243

    4 .................................................................................................................245 4.1. .................................................................................................246

    4.1.1. .........................................................248 4.1.2. ...........................................................249

    4.2. . ..................................................................251 4.3. .................................................................................................................252 4.4. .......................................................................................................256 4.5. ..............................................................................................258 4.6. ...............................................................................................................260

    4.6.1. ........................................................................................................260

  • 7

    4.6.2. ..................................................................................................................261

    5 .......................................................................................263 5.1. ...............................................................................................................263 5.2. ........................................................................267

    5.2.1. .......................................................................................................267 5.2.2. , .......................................................268 5.2.3. ( ) .............................................268 5.2.4. ............................................269 5.2.5. ........................................................................................269 5.2.6. ...............................................................270

    5.3. ............................................................................................................271 5.3.1. ...................................................................................................271 5.3.2. ..............................................................................................274

    5.4. , ................................................................276 5.4.1. .......................................277

    - - ................................................... 277 - ......................................................................................... 279 - ...................................................... 281

    5.4.2. .............................................................................................283 - ............................................................................................. 284 - - ............................................................................................... 284 - .......................................................................................................... 285 - ........................................................................................... 288 - ...................................................................................................... 290 - ................................................................ 293 - ........................................................... 293 - - ....................................................................................... 294 - - ............................................... 297

    5.4.3. ...............................................................................................................................297 - ............................................................ 297 - .............................................................................................. 300

    5.4.4. . .............................................300 5.4.5. .............................................................................................................303 5.4.6. ...........................................................................................................................306

    - ............................................................................................................. 307 - ............................................................................ 311 - ...................................................................................................... 312

    5.5. . .........................................312 5.5.1. . ...................................................313 5.5.2. .........................................................................................314 5.5.3. .................................................................................................317 5.5.4. ..................................................................................................318 5.5.5. ..............................................................................................320 5.5.6. ..................................................................................322 5.5.7. .....................................................324 5.5.8. ......................................325

    5.6. .............................................................................................326 5.6.1. ........................................................................................326 5.6.2. .........................................328 5.6.3. . .....................................330

  • 8

    5.6.4. k- ........................................................................333 5.7. .........................................................................334

    5.7.1. ....................................................................................334 - ....................................................................................................... 334 - ............................................................................................................ 338 - ........................................................................... 340

    5.7.2. ..............................................................................................340 - .................................................................................. 341

    5.7.3. ............................................................................................343 5.7.4. ..................................................................................................................................346 5.7.5. , .......................................................................................348

    - p- p- .......................................................................................................... 350 5.7.6. . ................................................353

    5.8. ..............................................................................................354 5.8.1. . .................................................................354

    - .................................................................. 355 - ................................................................... 355

    5.8.2. ..................................................................................................355 5.9. ...............................................................................................................357

    5.9.1. ........................................................................................................357 5.9.2. ..................................................................................................................363

    6 . NP- ..........................................369 6.1. .............................................................................................369

    6.1.1. .....................................................................................................369 6.1.2. ....................................................................................................370 6.1.3. ..........................................................................................................370 6.1.4. ..........................................................................................................................370

    6.2. NP- ................................................................................................................373 6.3. .............................................................................................................374

    6.3.1. ......................................................................376 6.3.2. .....................................................................................................380 6.3.3. - ....................................................................383 6.3.4. ...........................................................................................................385 6.3.5. ............................................................................................388 6.3.6. ...........................................................................391 6.3.7. ................................................................................................395

    6.4. ...........................................................................398 6.4.1. ( ).............................................................398

    6.5. ......................................................................................401 6.5.1. "X"- "O".....................................................................................................402 6.5.2. .........................................................................405 6.5.3. - ....................................................................................................406 6.5.4. - ...................................................408

    6.6. ...............................................................................................................409 6.6.1. ........................................................................................................409 6.6.2. ..................................................................................................................413

    - NP- ................................................................................................................ 413 - ........................................................................................................... 425

    7 .......................................................................................427

  • 9

    7.1. K- ......................................................................427 7.2. .............................................................................................................................434 7.3. .......................................................................................445 7.4. ....................................................................................................450 7.5. ................................................................................................456 7.6. .........................................458 7.7. .................................................................................461 7.8. .............................................................................................464 7.9. ..........................................................................................466 7.10. ......................................................471 7.11. .......................................................................................................474 7.12. .............................................................................................................475

    7.12.1. ......................................................................................................475 7.12.2. ................................................................................................................478

    8 .........................................................................481 8.1. .............................................................................................................................481 8.2. ...........................................................................484

    8.2.1. .....................................................................................................484 8.2.2. ..........................................................................................................495 8.2.3. ..............................................................................................497 8.2.4. . ...............................................504 8.2.5. ............................................................508 8.2.6. - ........................................................................................513 8.2.7. - ........................................................................517 8.2.8. ...................................................................................522 8.2.9. .................................................................................................526

    8.3. ..............................................................................................528 8.3.1. .......................................................................................................528 8.3.2. .................................................................................................532 8.3.3. .............................................................................................................533 8.3.4. .................................................537 8.3.5. .....................................................539 8.3.6. .................................................................................540 8.3.7. ..........................................................................................542 8.3.8. ...........................................................543 8.3.9. ............................................................................................................548 8.3.10. .................................................................................................549

    8.4. .................................................................551 8.4.1. .............................................................................................................552 8.4.2. ...............................................................................................................553 8.4.3. .......................................................................................................555 8.4.4. ....................................................559 8.4.5. ............................................................................................561 8.4.6. ...................................................................................................564 8.4.7. ............................................................................................565 8.4.8. .............................................................................................................568 8.4.9. ....................................................................................................571 8.4.10. .........................................................................................574

  • 10

    8.4.11. .............................................................................................................576 8.4.12. - ............................................................................................................579 8.4.13. ..............................................................................................582

    8.5. ...............................................................................................................584 8.5.1. ........................................................................................................584 8.5.2. ..................................................................................................................591

    9 ..................................595 9.1. ...............................................................................................................595

    9.1.1. ...........................................................................................................596 9.1.2. ........................................................................598 9.1.3. .................................................................601 9.1.4. ...................................................................................604 9.1.5. .......................................................................................605 9.1.6. .....................................................................................607 9.1.7. ...............................................................................................608 9.1.8. . . ...........................................................610

    9.2. .......................................................................................................616 9.2.1. ......................................................................617

    - .......................................................................................... 618 9.2.2. ..........................................................................621 9.2.3. ..................................................................................................622

    9.3. ........................................................................627 9.3.1. .........................................................................................628

    9.4. ...............................................................................................................629 9.4.1. ........................................................................................................629 9.4.2. ..................................................................................................................633

    10 ..............................................................................................637 10.1. ............................................................................................................................637 10.2. ........................................................................................................638 10.3. ................................................................................640

    10.3.1. ...............................................................................................640 10.3.2. ................................................................................641 10.3.3. ........................................................................................643 10.3.4. ...........646 10.3.5. .................................................................................................646 10.3.6. .....................................................................................................648 10.3.7. .............................................................................................649 10.3.8. . .........................650 10.3.9. ............................................................................653 10.3.10. : PackBits ..............................................................655

    10.4. ....................................................................................................656 10.4.1. - ......................................................................................656 10.4.2. ...............................................................................................660 10.4.3. .............................................................................671 10.4.4. K ......................................................................................................672 10.4.5. ............................................................................................673

    10.5. ..............................................................................................681 10.5.1. ....................................................................683

  • 11

    10.5.2. ......................................................................................................686 10.5.3. : MNP-5...................................................................688

    10.6. .......................................................................................................690 10.6.1. .....................................................................................................................691 10.6.2. ...........................................................................................................695 10.6.3. .............................................................................................696 10.6.4. ....................................................................697 10.6.5. LZ77. ..........................................................698 10.6.6. LZSS. ..............................................................................................698 10.6.7. FLZ. LZ77 ......................................................................................699 10.6.8. LZW. ................................................................................700 10.6.9. GIF. CompuServe .....................................................................706 10.6.10. ....................................................................707 10.6.11. ................................................................................708 10.6.12. LZW ..................................................................................................709

    10.7. ..............................................................................................710 10.7.1. ..................................................................................710 10.7.2. JPEG ..............................................................................................................................711 10.7.3. . MPEG .......................................................713 10.7.4. ......................................................................................................................715 10.7.5. .......................................................................................716

    10.8. .............................................................................................................717 10.8.1. ......................................................................................................717 10.8.2. ................................................................................................................725

    ...........................................................................................................................727

    ......................................................................................................733

  • 12

  • -

    (, ) - , . , , " " . , - , , "" Introduction to Algorithms Cormen, Leiserson Rivest, .

    , "-", , . , . , . -.

    . , , , ( "" ) .. , , .

    - . , . , , , . , - . " ", , , .

    , - . , , -, - . , , , - , .., , , .., , , , , .

    . , .

    , - . , , - , . , , , , .

    1 2002

  • 14

  • 15

    ,

    . , :

    , ;

    , -mail .

    , (

    ) ,

    .

    - ,

    ( )

    .

    !

    , ,

    . , -

    :

    ;

    , ;

    ;

    .

    ! , !

    ,

    3 2005 .

  • 16

  • 0

    ,

    ,

    "Think of all the psychic energy expended in seeking a

    fundamental distinction between 'algorithm' and 'program'".

    ~ Epigrams in Programming

    [Adams-1980]

    , ,

    . ,

    1975 ( ), -

    , , , ,

    . , ,

    , , ,

    .

    , , -

    .

    ,

    , .

    10 [, .] ,

    ,

    , .

    -

    , -. ,

    ( ) computer science,

    . -

    , : ( : ),

    (: informatique), (: informatik) .

    informatics

    , . , informatics

    : ,

    - computer science (

    ), Microsoft Word

    .

    :

    (. International Olympiad in Informatics), (. Balkan

    Olympiad in Informatics).

    ... ,

    - ,

    , .

  • 0 - , 18

    0.1.

    , - -

    , 0.1. (

    ? ?)

    0.1. .

    0.1.1. -

    , -

    . -

    , - -

    . - ,

    .

    - :

    , , .

  • 0 - , 19

    , - .

    .

    - : " , -

    , ". ,

    : , -

    , , , () ,

    . , ,

    ,

    , , , . (

    0.1.1., 0.1.1. 0.1.1.).

    0.1.1. : ,

    .

    0.1.1. -

    : , .

    0.1.1. , .

    0.1.2.

    , , -

    , , . -

  • 0 - , 20

    , ,

    , ( ,

    ). , ,

    , ,

    () .

    ,

    .

    , -

    , , , , -

    . , -

    . - -

    , -

    , . , ( . hacker,

    hacking) ( . cracker, cracking) .

    , .

    ( ),

    , , .

    , .

    -

    - .

    , ,

    , .

    0.1.3.

    10 -

    .. .

    - -

    ( -, - ,

    ).

    , , -

    .

    , :

    , .

    ,

    .

    0.1.4.

    ,

    ,

    . ""- Maxis

    .

    , , -

    . , -

    , . --

  • 0 - , 21

    -

    .

    0.1.5.

    ,

    .

    ,

    :

    : , .

    : , ,

    .

    : (

    )

    ( ). ,

    , , ,

    , .

    - ,

    , :

    , .

    , :

    ? , , , -

    , .

    - .

    . -,

    .

    ()

    , ,

    .

    -

    -

    .

    -

    , .

    0.1.6.

    , ,

    . , , .

    , ,

    : , ,

    .

    , ,

    (

    ).

    ( ) (

  • 0 - , 22

    ). ()

    , .

    . -

    ( -) -

    "" .

    - -

    .

    ,

    .

    .

    ,

    - . -

    .

    0.1.7.

    -

    :

    . , -

    -

    .

    :

    . ,

    (, , , .).

    ,

    . , ,

    . , , ,

    25 . ,

    , .

    ,

    . . -

    :

    ( ).

    ,

    , , :

    , - (

    ) .

  • 0 - , 23

    0.2.

    ( . lamer),

    . , ,

    , [-1989].

    , - , ,

    .

    -, - , ,

    , , .

    , ,

    .

    , ,

    :

    i++; /* i */

    e , , Minesweeper Windows

    - ,

    1 [Prize-2000].

    , ,

    . , ,

    10 .

    ,

    .

    , , ( . garbage collector)

    , Java,

    , XX .

    , , -

    Google ,

    .

    , , -

    + .

    , , "

    , (n2)", - (n

    3), n

    3 > n

    2.

    , C -

    , .

    , ,

    , .

    , , , ,

    ,

    A B C D E F

    . ,

    , , .

  • 0 - , 24

    , 10 10 -

    , , 10 ,

    10% -.

    , brute-force- ftp ( . File Transfer Protocol

    ) , ,

    hack- , - 5 (

    ), .

    ,

    ( /,

    ).

    , , -

    (, ).

    , .

    , :

    0x000000FF & (i >> 24)

    , -

    , :

    n

    i

    in

    mf

    m

    n

    1

    2

    2

    , . , -

    , : ,

    , .

    , ,

    . , -

    , .

    , , -

    .

    ( ):

    , .

    , , ,

    :

    , .

    0.3.

    ,

    . , .

    , ,

    .

    0.3.1.

    al-

    Khowarizmi, VIII

    Al-

    jabr wal muqabala (, -

    ). -

    , :

  • 0 - , 25

    Al-Khashi, XV

    16 .

    , , . , XII-

    Al-*

    , ,

    , ,

    [Knuth-1/1968].

    ,

    , :

    ;

    , ;

    , - .

    ( ) - ,

    (, -

    ). - ,

    .

    , .

    . -,

    ,

    .

    ,

    , XX .

    0.3.2.

    300 . . . . , -

    m n:

    1) m - n, . 2) m : m n. 3) m 0, 1),

    m n.

    4) (- ) n.

    250 . . . . , ,

    - . , -

    , 250 . . . . , ( ), -

    .

    : .

    780-850 . , , Abu Ja'far Mohammed Ben

    Musa al-Khwarizmi "Hisab al-jabr w'al-muqabala".

    1424 . , Ghiyath al-Din Jamshid Mas'ud al-Kashi

    16 .

    0.3.3.

    1845 . (Gabriel Lame ,

    , ,

    ) , ,

    5 - .

  • 0 - , 26

    1910 . ,

    .

    0.3.4.

    1900 .

    ( ) -

    .

    1920-30 . ,

    .

    1930 . -.

    1936 . ,

    , . (

    , .)

    .

    XX ( )

    , . -

    , ,

    . , ,

    XXI ,

    .

    , ,

    , , .

    0.4. = ++

    , .

    :

    ;

    ;

    C , ;

    , .

    : , ,

    ? , :

    1. = ++, = -

    ++.

    2. .

    3. ++: ++

    .

    0.4.1.

    -

    .

    ( , , ),

    ,

    , .

  • 0 - , 27

    , , .

    - -

    (

    - -

    ).

    ,

    , ++, Java. -

    ( ) ,

    .

    -

    , . -

    ,

    , "

    ".

    ,

    . ,

    , .

    ,

    / , -

    . -

    - , ,

    .

    ( . -

    , ,

    .). - ( )

    ( -).

    0.4.2.

    1. " " - ,

    , , -

    .

    2. " " - -

    , , .

    3. ""

    4. "" "" .

    , ( ) -

    "" .

    -

    . -

    , -

    . , . -

    , -

    , .

    5. " "

    6. " . NP- "

    7. " "

    8. " "

    9. " "

    10. ""

  • 0 - , 28

    0.4.3. C?

    -

    .

    ( upgrade ++) , , -

    , . - (

    ) "- " Java.

    , -

    , "" ,

    Java ( -

    ).

    : -

    , -

    "" , -

    ( ). ,

    ( )

    . ,

    , -

    ,

    .

    , , -

    , -

    .

    , ++? upgrade-

    , . , -

    ++ ,

    , , . ,

    : , ,

    - , . , , -

    Algorithms in Pascal, - , ++ Java. -

    ++.

    , ? , .

    : - , -

    , ,

    - , -: - -

    . , ,

    . :

    ( ), ,

    10 .

    Delphi.

    ,

    . informatics,

    . Borland International

    , .

    Delphi .

    Macintosh ( ,

    ) Linux, Unix .

    : ++, Java, -

    . , --

    Java, Javascript, Perl, PHP

    - :

    , .

  • 0 - , 29

    0.4.4.

    (, , , -

    ..), , -

    "" -

    .

    DOS ( Borland C++ 3.1),

    Windows ( Visual C++ 6.0).

    ANSI .

    Windows, DOS, -

    / .

    0.5.

    , , .

    .

    0.5.1.

    -

    , , -

    , ,

    .

    , "

    " ( ). ,

    , .

    SAP Labs Rila

    Solutions .

    , ( ),

    - , -

    ( , deadline

    . 22:20 01:55 .).

    . -

    ( -

    ). ( ) ,

    , ,

    (

    .).

    . , -

    ,

    .

    , . -

    , , , , -

    , , , , ,

    .

  • 0 - , 30

    , -

    , ,

    .

    - ( -

    , . ).

    ( ), -

    .

    , .

    , " " -

    , bold ,

    - .

    0.5.2.

    ,

    http://www.nakov.com/algoplus-bugs/submit-bug.php:

    (20), (15), (12), (12),

    (6), (5), (3), (3),

    (3), (3), (3), (2),

    (2), (2), (2), (2), (2),

    (2), (2), (2), (2),

    (2), (2), Ka (1), (1), (1),

    (1), (1), (1), (1),

    (1), (1), (1), (1),

    (1), (1), (1) (1) .

    0.5.3.

    . , , -

    -

    , . , , -

    , (, ) -

    ( ).

    :

    http://www.facebook.com/groups/168112146541301

    :

    [email protected]; [email protected]

    [email protected]; [email protected]

    - ,

    .

    -

    :

    http://www.programirane.org

    :

    ;

    , ; ; ; ;

    ; - .

    http://www.nakov.com/algoplus-bugs/submit-bug.phphttp://www.facebook.com/groups/168112146541301http://www.programirane.org/

  • 0 - , 31

  • 1

    " :

    , , , ."

    ~

    1.1.

    ,

    -.

    ,

    - , .

    1.1.1.

    ,

    , , .

    , , ,

    ,

    . -. ,

    .

    .

    -

    -

    . - .

    , , () , -

    , .

    , , ,

    , , ax2 + bx + c = 0 .

    - :

    A, B, C, ... . , ,

    - ( ).

    ,

    A a1, a2, ..., an

    :

    A = {a1, a2, ..., an}

    , ai, i = 1,2,...,n, A aiA,

    aiA. -

    ( A - n),

    |A|. n = 0, . -,

    ( 1.1.1.):

  • 1 - 34

    , (a, b, ) ,

    , , .

    A

    a

    b

    1.1.1. .

    , ,

    [,-1973]. ,

    -.

    1.1. A -

    B, A B. B ( 1.1.1.). -

    , B , A

    () B. B.

    A B A A B B

    B A

    (a) () () ()

    1.1.1. (), (), () () .

    1.2. C A B,

    a , aA aB. C = AB.

    1.3. C = AB A B C,

    , A B.

    1.4. C = A\B A B C,

    , A, B.

    1.5. , .

    .

    -, .

    , ,

    . ():

    {a, a, b} {a, b, b} {a, b, a} {a, b} {b, a}

    1.6. , , -

    .

    1.7. n- , -

    n- ().

  • 1 - 35

    n- , .

    , (a, b, c) (a, c, b) ..

    :

    1. A = {1,2,4,5,7} B = {2,3,4,5,6}. :

    AB, AB, A\B, B\A.

    2. A B , AB = A.

    B?

    3. A B : AB = (AB) \ (AB).

    A = {1,2,4,5,7} B = {2,3,4,5,6}.

    4. , A B = B A.

    : AB, AB, A\B, B\A, AB?

    -

    , -

    . (

    3 "" : , ),

    .

    . , -

    , , .

    1.8. ( N) -

    , 0, 1, 2, 3, ....

    , .

    - :

    , .

    , N - , .

    , n-

    .

    1.9. Z :

    ..., 3, 2, 1 ( ), 0 (), 1, 2, 3, ... ( ).

    ,

    [-1995]. - ,

    ,

    .

    -

    . ANSI C (American National Standards Institute [ANSIC])

    ( 1.1.1. Borland C DOS), -

    , :

    |short| |int| |long|

    int ( , DOS

    2 , Windows 4).

    , unsigned, ,

    : (unsigned)(-1).

  • 1 - 36

    1.1.1a. Borland C DOS.

    1.1.1a. ,

    .

    , . , ( -

    ) , ( . overflow)

    .

    1.10. p/q, p q q -

    . Q.

    1.11. , :

    x = n + 0,d1d2d3... ,

    n , di 0 9. 0,d1d2d3...

    . ,

    kk

    k

    k

    k dddnxddd

    n10

    1

    10100101010010

    2121

    kN, k 0.

    , di .

    (.. ) . -

    1/3 = 0,333333..... 3

    . 1/3 = 0,(3) .

    - , 1/7 = 0,(142857).

    , , ..

    p/q (p,qN, q > 0),

    :

    = 3,1415926535 ....

    , -

    355/113, ,

    ( 6 )

    . 22/7.

    :

    , [-1995]. , -

    IEEE (Institute of Electrical & Electronics

    Engineers). , .

    1.1.1. Borland C DOS.

    float 3,4.10

    38 , ..., 3,4.10

    38 32

    double 1,7.10308

    , ..., 1,7.10308

    64

    long double 3,4.104932

    , ..., 1,1.104932

    80

    char 128, ..., 127 8

    unsigned char 0, ..., 255 8

    short int 32768, ..., 32767 16

    int 32768, ..., 32767 16

    long int 2147483648, .., 2147483647 32

    unsigned short int 0, ..., 65535 16

    unsigned long int 0, ..., 4294967295 32

  • 1 - 37

    1.1.1. Borland C.

    ,

    ( . underflow):

    ( ,

    ).

    : 1/3

    .

    , , - ( > 0) ,

    ( ), - ,

    0.

    :

    , , -

    .

    - .

    m n , m 0. q r (0 r <

    m) , n = q.m + r. q n/m, r

    . r , , m n (n

    m) m|n. ( )

    / %. "",

    :

    q = n / m;

    r = n % m;

    1.12. (n m) % z = 0, , n m z

    n m (mod z).

    n. : ( )

    n 10. , n . ,

    n , , n

    :

    #include

    unsigned n = 4242;

    int main(void) {

    unsigned digits;

    for (digits = 0; n > 0; n /= 10, digits++);

    printf(" %u %u\n", n, digits);

    return 0;

    }

    digits.c

    :

    1. m n, (m,n) : (7,3), (7,3),

    (7,3), (7,3), (3, 7), (3,7), (3,7), (3,7).

    2. m n (m 0) -

    n = q.m + r, 0 r < m, (q, r ). [-1995]

    3. .

    ?

  • 1 - 38

    -

    a1, a2, ... , an. S = a1 + a2 + ... + an -

    :

    n

    i

    iaS1

    ,

    ni

    iaS1

    ,

    ni

    iaS..1

    R(x), i

    :

    )(: xRi

    iaS

    C Sn n : unsigned sum(unsigned n)

    { unsigned i, s = 0;

    for (i = 1; i

  • 1 - 39

    )(: )(:)(: )(:

    )2(xSj xRi

    ij

    xRi xSj

    ij aa

    )(&&)()(||)()()(

    )3(xRxS

    i

    xRxS

    i

    xS

    i

    xR

    i aaaa

    S(x)||R(x) S(x)&&R(x) -

    , S R, i j.

    P = 1.a2.a3.....an , ,

    :

    n

    i

    iaP1

    ,

    ni

    iaP1

    ni

    iaP..1

    a[], n -

    , :

    int mult(int a[], unsigned n)

    { unsigned i;

    int s = 1;

    for (i = 0; i < n; i++) s *= a[i];

    return s;

    }

    mult.c

    :

    1. .

    2. (1), (2) (3) .

    3. , (1), (2) (3).

    4. (1), (2) (3), :

    n

    mi

    i

    mni

    i

    ni

    i aaaa ..1....1

    , 1 n m

    - , , n-

    1.13. x , y , -

    :

    xy = x.x. ... .x

    (y )

    y < 0, xy = 1 / x

    -y.

    (x 0):

    xy = x

    y-1.x

    xy = x

    y+1/x

    xy1+y2 = x

    y1.xy2

    xy1.y2 = (x

    y1)y2

    xy y -

    :

    double power(double x, unsigned y)

    { double res = x;

    unsigned i;

    for (i = 1; i < y; i++) res *= x;

    return res;

  • 1 - 40

    }

    power.c

    - ( 7.5.) , - -

    xy.

    xn = y (n , n > 1), x n- y

    n yx . , y n- y .

    n = 2, y y

    y . ,

    :

    q pq

    p

    xx

    - , x y (x > 1). y

    y = d,d1d2d3 ... :

    kk

    k

    k

    k ddddy

    dddd

    xxx 101

    10100101010010

    2121

    , xy

    , k.

    , -

    , - . y = bx b 1, b >

    0, y > 0 x. y b

    logb y. (x > 0, y > 0, b > 0, b 1, c

    > 0, c 1):

    )4(log

    loglog

    )3(log.log

    )2(loglog)(log

    )1(loglog

    b

    xx

    xyx

    yxxy

    bbx

    c

    c

    b

    b

    y

    b

    bbb

    x

    b

    xb

    - , 2

    log x log2 x. ln x

    log x: H e = 2,71828... ( 1.1.6.)

    :

    1. - , .

    2. (1), (2) (3) , .

    - .

    n, nN ( n!) 1 n:

    n

    i

    inn1

    ...2.1! ,

    0! = 1.

    C n! :

    unsigned long factoriel(unsigned n)

    { unsigned i;

    unsigned long r = 1;

  • 1 - 41

    for (i = 2; i

  • 1 - 42

    - ,

    struct data, :

    struct data {

    int a;

    int b;

    ...

    } A[m][n];

    / -

    . - ( 1.1.1.).

    11 12 ... 1 n

    a 21 22 ... a 2 n

    m 1 a m 2 ... a mn

    11 12 ... 1 n

    a 21 22 ... a 2 n

    m 1 a m2 ... a mn

    a) ) 1.1.1. : () () .

    /* */

    for (i = 0; i < m; i++)

    for (j = 0; j < n; j++)

    scanf("%d", &A[i][j]);

    /* */

    for (i = 0; i < n; i++)

    for (j = 0; j < m; j++)

    scanf("%d", &A[j][i]);

    /* */

    for (i = 0; i < m; i++) {

    for (j = 0; j < n; j++)

    printf("%.3d", A[i][j]);

    printf("\n");

    }

    matrix.c

    Amn Bmn Cmn , cij = aij + bij ( i = 1, 2,...,

    m, j = 1, 2, ..., .n), 1.1.1.

    11 12 ... 1n

    a21 22 ... a2n

    ...

    m1 am2 ... amn

    b11 b12 ... b1n

    b21 b22 ... b2n

    b m1 bm2 ... bmn

    Cmn = + =

    11+b11 12+ b12 ... 1n+ b1n

    a21+ b21 22+ b22 ... a2n+ b2n

    m1+bm1 am2+ bm2 ... amn+ bmn

    1.1.1. .

    for (i = 0; i < m; i++)

  • 1 - 43

    for (j = 0; j < n; j++)

    C[i][j] = A[i][j] + B[i][j];

    summat.c

    Amn Bnp Cmp, :

    n

    k

    kjikij bac1

    . , i = 1,2,...,m j = 1,2,...,p.

    -, m.p.n

    . n > m n > p, n3.

    for (i = 0; i < m; i++)

    for (j = 0; j < p; j++) {

    C[i][j] = 0;

    for (k = 0; k < n; k++)

    C[i][j] += A[i][k] * B[k][j];

    }

    multmat.c

    , , . -

    , nlog 7

    ( n2,81

    ) , -

    . , -

    , 7.6., .

    :

    1. unsigned a[MAX][MAX].

    void fillMatrix(unsigned a[][MAX], unsigned n),

    a[][] :

    0 20 19 17 14

    1 0 18 16 13

    2 5 0 15 12

    3 6 8 0 11

    4 7 9 10 0

    2. unsigned a[MAX][MAX]. , -

    , n = 5 :

    1 16 15 14 13

    2 17 24 23 12

    3 18 25 22 11

    4 19 20 21 10

    5 6 7 8 9

    1.1.2.

    : a1, a2, ..., an. -

    P = a1.a2..an.

    , ai = i, i = 1,2,...,n, P = 1.2 ... n = n!.

  • 1 - 44

    ,

    1.1.1., .

    n!. n! ,

    -. 10! e 3628800, . 20!

    C.

    - , ,

    , :

    P

    n

    i

    ia1

    10log1, [x] -

    , - x.

    , ,

    P [1+log10(P)], -

    :

    log P = log(a1.a2. an) = log a1 + log a2 + + log an.

    n!

    #include

    #include

    const unsigned long n = 123;

    int main(void)

    {

    double digits = 0;

    unsigned i;

    for (i = 1; i

  • 1 - 45

    , .

    100

    , ,

    , (, ,

    ).

    , :

    [a, b]?

    ?

    n- ?

    (x) ,

    x, (x) . (

    6.2.), (x), ( , ln x loge x):

    ( ) (x) x / ln(x a),

    , - x.

    - = 1.

    . n- [n.ln(n)]. -

    [n(ln(n) + ln(ln n 1))].

    . x 1/ln(x).

    ,

    [Primes-1][Primes-2]:

    1. n > 2 . 2. n > 17 . 3. -

    .

    4. n > 5 . 5. .

    . n2+m

    2 n

    2+m

    2+1.

    . n2+1.

    . () n2 (n+1)

    2 .

    :

    1. (x) - , -?

    2. .

    3. .

    -

    , , :

    [2, 2

    p 1] p , , , p .

  • 1 - 46

    ,

    , ,

    - .

    (). p , (p1)! 1 (mod p).

    (p1)!, - -

    2

    p 1 .

    , 2

    p 1:

    p (). , ,

    p x, x > p , , p p = x.y, y < p , ..

    - p . :

    #include

    #include

    const unsigned n = 23;

    char isPrime(unsigned n) /* 1, , 0 */

    { unsigned i = 2;

    if (n == 2) return 1;

    while (i

  • 1 - 47

    { unsigned i = 0;

    while (i < K && prime[i] * prime[i]

  • 1 - 48

    1.1.3. .

    : ,

    ( ).

    :

    2 n :

    2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... , n

    2. ,

    :

    (2), 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... , n

    -, :

    3. , 3:

    (2), (3), 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... , n

    , 5 5-:

    (2), (3), 4, (5), 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... , n

    "" , -

    i . ,

    ,

    . -

    :

    1) sieve[] . -, , 1. - i,

    (.. -

    ). i = 2.

    2) i, sieve[i] 0. i e . 3) M 1 sieve[k], k = i, 2i, 3i, , (n/i).i (..

    i ).

    4) i n, 2, . #include

    #define MAXN 30000

    /* n */

  • 1 - 49

    const unsigned n = 200;

    char sieve[MAXN];

    void eratosten(unsigned n)

    { unsigned j, i = 2;

    while (i

  • 1 - 50

    }

    void findPrimes(unsigned n)

    { unsigned i = 2;

    while (i < n) {

    if (isPrime(i)) {

    primes[pN] = i;

    pN++;

    printf("%5u", i);

    }

    i++;

    }

    }

    int main(void) {

    findPrimes(n);

    printf("\n");

    return 0;

    }

    rproc.c

    , n ,

    . [a,b] -

    a (a>>1), - -

    .

    2, 3 5.

    :

    n = 30.q+r, r[0..29] r[0, 1, 2, ..., 14, 15]. 30.q = 2.3.5.q

    30 8. . .

    4k/15 , :

    30.q1, 30.q7, 30.q11, 30.q13

    -

    .

    :

    1. : 3) k = i2, -

    i .

    . .

    2. .

    3. , -

    4 .

    -

    ( ) P (P>1)

    () P1q1. P2

    q2. .Pnqn, P1 < P2 <

    < Pn P , a qi . [-1995].

    :

    520 = 23.5

    1.13

    1

    64 = 26

    2345 = 51.7

    1.67

    1

  • 1 - 51

    A , -

    ( 2 1.1.5.), :

    P.

    1) i = 2. 2) k = 0. P i, k .

    3).

    3) k > 0, ik.

    4)

    4) P > 1, i 2).

    , . -

    :

    #include

    unsigned n = 435; /* , */

    int main(void) {

    unsigned how, i, j;

    printf("%u = ", n);

    i = 1;

    while (n != 1) {

    i++;

    how = 0;

    while (0 == n % i) {

    how++;

    n = n / i;

    }

    for (j = 0; j < how; j++)

    printf("%u ", i);

    }

    printf("\n");

    return 0;

    }

    numdev.c

    :

    .

    - ,

    : a1, a2, ..., an. ,

    P = a1.2. ... .an.

    1.1.2., -

    . ,

    : , , 2 5,

    , 2, , 5.

    , , :

    1) i (i = 1, 2,..., n) ai ai = 2Mi

    .5Ni

    .bi, bi % 2 0, bi % 5

    0.

    2) P = cnii

    ni

    i NM

    .5.2 ..1..1 , (c ), a

    n

    i

    Mi1

    n

    i

    Ni1

    .

    , :

    25, 4, 20, 11, 13, 15

  • 1 - 52

    :

    20.5

    2.1, 2

    2.5

    0.1, 2

    2.5

    1.1, 2

    0.5

    0.11, 2

    0.5

    0.13, 2

    0.5

    1.3,

    4 . :

    25.4.20.11.13.15 = 4290000.

    - .

    .

    n!.

    ][log

    1

    5

    5

    n

    kk

    n . - ,

    2 5 n . #include

    const unsigned n = 10;

    int main(void) {

    unsigned zeroes = 0, p = 5;

    while (n >= p) {

    zeroes += n / p;

    p *= 5;

    }

    printf(" %u! %u\n", n, zeroes);

    return 0;

    }

    factzero.c

    :

    1. ,

    .

    2. , -

    .

    3. , n!

    1.1.4.

    -

    1.15. ,

    2p1, p e .

    39 p, 2p1 :

    2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279, 2203, 2281, 3217, 4253, 4423, 9689, 9941,

    11213, 19937, 21701, 23209, 44497, 86243, 110503, 132049, 216091, 756839, 859433, 1257787, 1398269,

    2976221, 3021377, 6972593, 13466917

    37 p 37

    . ( 1999 2001 .),

    38- 39-, ,

    -. p. .. - .

    : , -

    . ,

    . 23- 1963 .,

    ,

  • 1 - 53

    "211213

    1 " (

    1.1.4.).

    - , , :

    213466917

    1 8107892 (??39- M )

    26972593

    1 2098960 (??38- M )

    23021377

    1 909526 (37- M )

    22976221

    1 895932 (36- M )

    21398269

    1 420921 (35- M )

    - , -

    . ,

    (

    -).

    - : , ""

    38- , $50000.

    $250000 [Primes-3].

    1.1.4. 2

    11213-1 .

    :

    p = 2, 3, 5, 7, 11, = 2p 1 .

    , .

    1870 , -

    - ,

    ( e -

    [Guinier-1991]).

    (LucasLehmer Test, 1930) :

    :

    1 = 4

    n+1 = (En )2 2

    :

    4, 14, 194, 37634, .

    (-). m = 2p 1 ( p )

    , :

    (Ep1) % (2p 1) = 0

    -

    .

    .

    :

    1. n ,

    -.

    2. n ,

    -. .

    3. 2n1 , n ?

  • 1 - 54

    - .

    1.16. n ,

    ( n ).

    3 :

    6 = 1 + 2 + 3,

    28 = 1 + 2 + 4 + 7 + 14,

    496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248.

    :

    8128, 33550336, 8589869056,

    , ( n = 1,

    2, 3, ), 5-

    . :

    . () 2p1 , 2

    p1.(2

    p1) .

    n -

    : pi n

    ( 10 2, 3, 5, 7, 13, 17, 19, 31, 61, 89). ,

    n,

    . ,

    : 2

    . number[]:

    .

    : number[k-1] ( k ),

    number[k-2] .. k- number[0].

    , number[], :

    i = 0; number[i]++;

    while (10 == number[i]) { number[i] = 0; number[++i]++; }

    if (i == k) k++;

    2,

    , .. 9, -

    , while(10 == number[i]), .

    , :

    unsigned i, carry = 0, temp;

    for (i = 0; i < k; i++) {

    temp = number[i] * 2 + carry;

    number[i] = temp % 10;

    carry = temp / 10;

    }

    if (carry > 0) number[k++] = carry;

    , 10 , -

    mPrimes[]:

    #include

    #define MN 10

    unsigned mPrimes[MN] = { 2, 3, 5, 7, 13, 17, 19, 31, 61, 89 };

    unsigned k, number[200];

    void doubleN(void)

    { unsigned i, carry = 0, temp;

  • 1 - 55

    for (i = 0; i < k; i++) {

    temp = number[i] * 2 + carry;

    number[i] = temp % 10;

    carry = temp / 10;

    }

    if (carry > 0)

    number[k++] = carry;

    }

    void print(void)

    {

    unsigned i;

    for (i = k; i > 0; i--)

    printf("%u", number[i-1]);

    printf("\n");

    }

    void perfect(unsigned s, unsigned m)

    {

    unsigned i;

    k = 1; number[0] = 1;

    for (i = 0; i < m; i++)

    doubleN(); /* 2^i */

    number[0]--; /* {2,4,8,6} */

    for (i = 0; i < m - 1; i++)

    doubleN();

    printf("%2u-o = ", s);

    print(); /* */

    }

    int main(void) {

    unsigned i;

    for (i = 1; i

  • 1 - 56

    2. , ,

    ( 1 ) 2. ?

    1.1.5. , .

    1.17. n- .

    k-

    :

    )(1)...1(

    )1)...(1.(

    kk

    knnnC

    k

    n

    n

    k

    , n

    kC

    k

    n -

    , n,

    . .

    n , (*) :

    (**))!(!

    !

    knk

    nC

    k

    n

    n

    k

    , ,

    n k ( 1.3.3.) (?).

    , (a+b)n, -

    :

    n

    i

    iinnnnn bai

    nba

    n

    nba

    nba

    nba

    0

    0110 ...10

    , [Knuth-

    1/1968]. .

    1.1.5. n

    kC , 0 k n < 10.

    n

    0

    n

    1

    n

    2

    n

    3

    n

    4

    n

    5

    n

    6

    n

    7

    n

    8

    n

    9

    n

    0 1 0 0 0 0 0 0 0 0 0

    1 1 1 0 0 0 0 0 0 0 0

    2 1 2 1 0 0 0 0 0 0 0

    3 1 3 3 1 0 0 0 0 0 0

    4 1 4 6 4 1 0 0 0 0 0

    5 1 5 10 10 5 1 0 0 0 0

    6 1 6 15 20 15 6 1 0 0 0

    7 1 7 21 35 35 21 7 1 0 0

    8 1 8 28 56 70 56 28 8 1 0

    9 1 9 36 84 126 126 84 36 9 1

    1.1.5. .

    , --

    1.1.5., :

  • 1 - 57

    10

    n

    nn (1)

    kn

    n

    k

    n (2)

    1

    11

    k

    n

    k

    n

    k

    n (3)

    1.1.5. - ,

    :

    n = 0 1

    n = 1 1 1

    n = 2 1 2 1

    n = 3 1 3 3 1

    n = 4 1 4 6 4 1

    n = 5 1 5 10 10 5 1

    ...

    1.1.5. .

    1 ( (1) (2)),

    ( (3)). n-

    , (n1)- .

    k

    nC

    n

    k

    , n- k-

    n

    kC . , i

    i1, .

    :

    lastLine[], n k n

    kC

    .

    #include

    /* */

    #define MAXN 1000

    const unsigned n = 7;

    const unsigned k = 3;

    unsigned long lastLine[MAXN + 1];

    int main(void) {

    unsigned i, j;

    lastLine[0] = 1;

    for (i = 1; i = 1; j--)

    lastLine[j] += lastLine[j - 1];

    }

    printf("C(%u,%u) = %lu\n", n, k, lastLine[k]);

    return 0;

    }

    pascalt.c

  • 1 - 58

    , (*)

    .

    (**) n! k!(nk)!,

    , : n = 100 k =

    2 100! 2!.98! ( 150 ), 100

    2C 4950.

    2 n

    kC ( )

    1) 7

    3C . (*) -

    , .

    : 7! = 1.2.3...7 =

    1.2.3.22.5.(2.3).7 = 2

    4.3

    2.5

    1.7

    1.

    2) : 3!.(73)! = 1.2.3. 1.2.3.22 = 2

    4.3

    2.

    3) : 1

    .75

    .32

    .7.5.32 11

    24

    1124

    .

    4) : 5

    1.7

    1 = 35.

    2.

    #include

    #define MAXN 500

    unsigned long n = 7;

    unsigned long k = 3;

    unsigned long pN, primes[MAXN], counts[MAXN];

    void modify(unsigned long x, unsigned how)

    { unsigned i;

    for (i = 0; i < pN; i++)

    if (x == primes[i]) {

    counts[i] += how;

    return;

    }

    counts[pN] = how;

    primes[pN++] = x;

    }

    void solve(unsigned long start, unsigned long end, unsigned long inc)

    { unsigned long prime, mul, how, i;

    for (i = start; i 0)

    modify(prime, inc * how);

    prime++;

    }

    }

    }

    unsigned long calc(void)

    { unsigned i, j;

  • 1 - 59

    unsigned long result = 1;

    for (i = 0; i < pN; i++)

    for (j = 0; j < counts[i]; j++)

    result *= primes[i];

    return result;

    }

    int main(void) {

    printf("C(%lu,%lu)= ", n, k);

    pN = 0;

    if (n - k < k) k = n - k;

    solve(n - k + 1, n, 1); /* (nk+1),...,n */

    solve(1, k, -1); /* 1,...,k */

    printf("%lu\n", calc());

    return 0;

    }

    cnk.c

    ( , ..

    )

    n

    kC , , ,

    .

    : "" -

    :

    kn

    n

    k

    n

    , .

    :

    1. (1), (2) (3), -

    . , (1) :

    1!0!

    !

    )!(!

    !

    1!!0

    !

    )!0(!0

    !

    0

    0

    n

    n

    nnn

    nC

    n

    n

    n

    n

    n

    nC

    n

    n

    n

    n

    2. (1), (2) (3).

    3. 1 (pascalt.c) n

    kC

    lastLine[] n+1 , - n,

    . : ,

    , 1 i, 1 k,

    - . , k

    n, (2) n

    knC , n

    kC .

    1.1.6.

    -

    .

    , - -

  • 1 - 60

    .

    0, 1, 2, 3, 4, 5, 6, 7, 8 9, (

    ,

    - , .).

    , , .

    ( 10 ). -

    , ( 0 1) ( -

    ) . , p p < 0,

    .

    , -

    .

    0 1. 11(10) 1011(2) (

    , .).

    16 . ,

    0 9 , A, B, C, D, E

    F, 10, 11, 12, 13, 14 15. 254(10)

    FE(16). , -

    e = 2,718281828... ( .

    an

    n

    n

    1

    1 n). -

    .

    e (

    ),

    3 2.

    , 3 - e.

    . -

    0 0 V, 1 5 V. -

    . -

    , , ,

    1960 . , 1, 0 1. , 16 2 (16=2

    4).

    0 15 4 ( 0 1). --

    8 .

    , 0 255, .. 256 .

    256 = 162,

    .

    - (4 ),

    ,

    . - ,

    10101000110111(2) . :

    10 | 1010 | 0011 | 0111

    : 0010 | 1010 | 0011 | 0111

    2A37(16). ,

    ( ). -

    - . ,

    . , 153 ,

  • 1 - 61

    6. , 1, 5 3, ,

    3, 3 , -

    0, 1 2.

    - , -, . , .. -

    , . -

    123 3 3, 34 30. -

    ( 1.1.7.),

    . - : -

    . -. -

    , -

    p, p . -

    anan-1...a0 (p), i (1 i n) .

    :

    A = anpn + an-1p

    n-1 + ... a1p + a0

    ,

    -.

    :

    1. 0 1?

    2. 17 17 : 2; 8; 16.

    3. 17 17 2; 8; 16.

    4. ,

    : 111, 110100, 1110100101, 10010101, 10101010101 10111110101.

    5. , -

    : 11, 11001, 1010101, 111111, 1010101000, 10101101000 11010111000.

    6. ?

    7. 17 17 .

    - p-

    ,

    p- : A p

    , A 0, ,

    (?). 29

    ( ):

    29:2=14:2=7:2=3:2=1:2=0

    1 0 1 1 1

    : 29(10) = 11101(2). convert()

    : char getChar(char n) /* , n */

    { return (n < 10) ? n + '0' : n + 'A' - 10; }

    void reverse(char *pch)

    { char *pEnd;

    for (pEnd = pch + strlen(pch) - 1; pch < pEnd; pch++, pEnd--) {

    char c = *pch;

    *pch = *pEnd;

    *pEnd = c;

  • 1 - 62

    }

    }

    void convert(char *rslt, unsigned long n, unsigned char base)

    /* n (n >= 0) */

    /* base */

    { char *saveRslt = rslt;

    while (n > 0) {

    *rslt++ = getChar((char)(n % base));

    n /= base;

    }

    *rslt = '\0';

    reverse(saveRslt);

    }

    base.c

    - 1, ,

    p.

    A p- : -

    A p, . -

    0,125 :

    0,125.2=0,25.2=0,5.2=1,0

    0,125(10) = 0,001(2). A

    p- () . -

    .

    convertLessThan1() A (0 < 1) cnt

    , . void convertLessThan1(char *rslt,

    double n,

    unsigned char base,

    unsigned char cnt)

    /* 0 1 0 <

    1, ,

    , . convertReal(): void convertReal(char *rslt, double n,

    unsigned char base, unsigned char cnt)

    /* n base */

    { double integer, fraction;

  • 1 - 63

    /* */

    if (n < 0) {

    *rslt++ = '-';

    n = -n;

    }

    /* */

    fraction = modf(n, &integer);

    /* */

    convert(rslt, (unsigned long)integer, base);

    /* ( ...) */

    if ('\0' == *rslt) *rslt++ = '0';

    else rslt += strlen(rslt);

    *rslt++ = '.';

    /* */

    convertLessThan1(rslt, fraction, base, cnt);

    if ('\0' == *rslt) {

    *rslt++ = '0';

    *rslt = '\0';

    }

    }

    base.c

    :

    1. 157 : 3;5;7;14.

    2. 0,321 : 3;5;7;14.

    3. 157,321 : 3;5;7;14.

    4. -

    p- .

    5.

    p- .

    - p- .

    p- -

    A,

    . , , 12734(8), -

    : 12734(8) = 1.8

    4 + 2.83 + 7.82 + 3.8 + 4 = 5596(10)

    , 10 . -

    , 8,

    . - ,

    n- n

    . (1) (2).

    (1) Pn(x) = a0xn+a1x

    n-1+...+an-1x+an

    (2) Pn(x) = an+x(an-1+x(an-2+...+x(a2+x(a1+xa0))...))

    calculate():

  • 1 - 64

    char getValue(char c) /* c */

    { return (c >= '0' && c = 0 */

    { unsigned long result;

    for (result = 0; '\0' != *numb; num