Similar documents
/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

8 if switch for while do while 2

ex01.dvi


1 UTF Youtube ( ) / 30

ex01.dvi

Microsoft Word - keisankigairon.ch doc

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

明解Javaによるアルゴリズムとデータ構造

main

C言語によるアルゴリズムとデータ構造

¥¢¥ë¥´¥ê¥º¥à¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó ÎØ¹Ö #1

Block cipher

K227 Java 2

新・明解Javaで学ぶアルゴリズムとデータ構造

ALG ppt

r07.dvi

untitled

ohp07.dvi

明解Javaによるアルゴリズムとデータ構造

:30 12:00 I. I VI II. III. IV. a d V. VI

Taro-リストⅢ(公開版).jtd

ALG2012-A.ppt

:30 12:00 I. I VI II. III. IV. a d V. VI

Informatics 2010.key

WinHPC ppt

,,,,., C Java,,.,,.,., ,,.,, i

Informatics 2014

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

: : : TSTank 2

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

ALG2012-C.ppt

8 / 0 1 i++ i 1 i-- i C !!! C 2

アルゴリズムとデータ構造1

‚æ4›ñ

P05.ppt

untitled

Informatics 2015

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

tuat1.dvi

1.ppt

(search: ) [1] ( ) 2 (linear search) (sequential search) 1

21 B92 B92 Quantum cryptography simulator

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

P06.ppt

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

untitled

r02.dvi

ohp02.dvi

2.2 Java C main Java main 2 C 6 C Java 3 C Java ( ) G101Hello.java G101Hello main G101Hello.java /* G101Hello */ class G101Hello { /* main */ public s

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Microsoft PowerPoint ppt

Java updated

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

橡Pro PDF

明解Java入門編

1 4 2 EP) (EP) (EP)

kiso2-09.key


XMPによる並列化実装2

I java A

untitled

Taro-再帰関数Ⅱ(公開版).jtd

新・明解Javaで学ぶアルゴリズムとデータ構造

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

226

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

Java 3 p.2 3 Java : boolean Graphics draw3drect fill3drect C int C OK while (1) int boolean switch case C Calendar java.util.calendar A

DVIOUT

新版明解C言語 実践編

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

新・明解Java入門

Java Java Java Java Java 4 p * *** ***** *** * Unix p a,b,c,d 100,200,250,500 a*b = a*b+c = a*b+c*d = (a+b)*(c+d) = 225

Taro-再帰関数Ⅰ(公開版).jtd

oop1

プログラミング基礎I(再)

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

解きながら学ぶJava入門編

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

() / (front end) (back end) (phase) (pass) 1 2

void hash1_init(int *array) int i; for (i = 0; i < HASHSIZE; i++) array[i] = EMPTY; /* i EMPTY */ void hash1_insert(int *array, int n) if (n < 0 n >=

プログラミング入門1

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Java学習教材


Javaセキュアコーディングセミナー東京 第4回 メソッドとセキュリティ 演習解説

Taro-リストⅠ(公開版).jtd

PowerPoint Presentation

(Eclipse\202\305\212w\202\324Java2\215\374.pdf)

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

r1.dvi

プログラミング入門1

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

Transcription:

#include <stdio.h> #include <stdlib.h> #include <math.h> int gcd( int a, int b) { if ( b == 0 ) return a; else { int c = a % b; return gcd( b, c); } /* if */ } int main() { int a = 60; int b = 45; int c = gcd( a, b ); printf( "gcd(%d, %d) = %d\n", a, b, c ); return 0; }

kauai:yama550> gcc euclid.c -o euclid kauai:yama552>./euclid gcd(60, 45) = 15 kauai:yama553>

6 = 2 3 = (1 + 5)(1 5)

int gcd( int a, int b) { if ( b == 0 ) return a; else { int c = a % b; return gcd( b, c); } /* if */ }

int gcd( int a, int b) { if ( b == 0 ) return a; else { int c = a % b; return gcd( b, c); } /* if */ }

O

O(f(n)) = g(n) g(n) c f(n) Θ(f(n)) = g(n) c 2 f(n) g(n) c 1 f(n) Ω(f(n)) = g(n) c f(n) g(n)

g 1 (n) = O(n 2 ), g 2 (n) = O(n 3 ) g 1 (n) + g 2 (n) = O(n 3 )

GCD(x 4 + x 2 + 1, x 3 1) (x 4 + x 2 + 1) (x 3 1) = x... x 2 + x + 1 (x 3 1) (x 2 + x + 1) = (x 1)... 0

CGD(x 4 + 3x 3 + x + 1, 31x 2 + 1) 28 31 x + 962 961 237437 6076

GCD(x 10 + 3x 3 + x + 1, 31x 2 + 1) 28 31 x + 28629150 28629151 210299529796381 5392472365756

int mult(int a, int b) { int i; int s = 0; for (i = 0; i < b; i++ ){ s = s + a; } return s; } /* mult */ O(n + m)

int mult2(int a, int b) { if (b == 0) return 0; else if (b % 2 == 0){ int mm = mult2(a, b / 2); return mm + mm; } else { int mm = mult2(a, b / 2); return mm + mm + a; } /* if */ } /* mult2 */ a 2b = 2(a b ) a (2b + 1) = 2(a b )+a O(log n + log m)

O((log n + log m) 2 ) int mult3(int a, int b) { if (b == 0) return 0; else if (b % 2 == 0){ int mm = mult3(a, b / 2); return mm * 2; } else { int mm = mult3(a, b / 2); return add2(mm * 2, a); } /* if */ } /* mult3 */ int add2(int a, int b) { if (b == 0) return a; else if (a == 0) return b; else { int mm = add2(a / 2, b / 2); if (a % 2 > 0 && b % 2 > 0) return (mm + 1) * 2; else if (a % 2 > 0 && b % 2 == 0) return mm * 2 + 1; else if (a % 2 == 0 && b % 2 > 0) return mm * 2 + 1; else return mm * 2; } } /* add2 */

x n = x x x O

int exp(int a, int n) { if (n == 0) return 1; else { int m = exp(a, n / 2); m = m * m; if (n ) m = m * a; } return m; F F (n) = F (n/2) + c F (n) = O(log n)

a 1000 = (a 500 ) 2 a 500 = (a 250 ) 2 a 250 = (a 125 ) 2 a 125 = (a 61 ) 2 a a 61 = (a 30 ) 2 a a 30 = (a 15 ) 2 a 15 = (a 7 ) 2 a a 7 = (a 3 ) 2 a a 3 = a 2 a

p i p ( ) p p i ( ) p p! = i (p i)!i! a b a b = p (p 1) 2 1 (p i) (p i 1) 2 1 i (i 1) 2 1 p p p

x y (x + y) p = p ( p i ) x i y p i i=0 p i p p

p (x + y) p = p i=0 ( p i ) x i y p i (modp) = x 0 y p + x p y 0 (mod p) = x p + y p (mod p)

a p =(1+1+ +1) p a =1 p +1 p + +1 p (mod p) a =1+1+ + 1(mod p) a = a(mod p) a p 1 = 1(mod p)

0 0 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 0 0 1 1 2 4 3 9 4 1 5 10 6 6 7 4 8 4 9 6 10 10 11 1 12 9 13 4 14 1 #include <stdio.h> #include <stdlib.h> int myexp(int x, int i, int p); int myexp(int x, int i, int p) { if ( i == 0 ) return 1; else { int j = myexp( x, i / 2, p ); j = (j * j) % p; if (i % 2 == 1) j = (j * x) % p; return j; } /* if */ } /* myexp */ int main() { enum{ N = 13}; int i; for (i = 0; i < N; i++ ){ printf( "%5d%5d\n", i, myexp( i, N - 1, N )); } /* for */ return 0; } /* main */ a p 1 = 1(mod p)

a a a n

n a a n 1 = 1(mod p)

0 0 1 1 2 1 3 375 4 1 5 1 6 375 7 1 8 1 9 375 10 1 11 154 12 375 13 1 14 1 15 375 16 1 17 34 18 375 19 1 20 1 21 375 22 154 23 1 24 375 25 1 26 1 27 375 28 1 29 1 30 375 31 1 32 1 33 528 34 34 35 1 36 375 37 1 38 1 39 375 40 1 41 1 42 375 43 1 44 154 45 375 46 1 47 1 48 375 49 1 50 1 51 408 52 1 53 1 54 375 55 154 56 1 57 375 58 1 59 1 60 375 61 1 62 1 63 375 64 1 65 1 66 528 67 1 68 34 69 375 70 1 71 1 72 375 73 1 74 1 75 375 76 1 77 154 78 375 79 1 80 1 81 375 82 1 83 1 84 375 85 34 86 1 87 375 88 154 89 1 90 375 91 1 92 1 93 375 94 1 95 1 96 375 97 1 98 1 99 528 100 1 101 1 102 408 103 1 104 1 105 375 106 1 107 1 108 375 109 1 110 154 111 375 112 1 113 1 114 375 115 1 116 1 117 375 118 1 119 34 120 375 121 154 122 1 123 375 124 1 125 1 126 375 127 1 128 1 129 375 130 1 131 1 132 528 133 1 134 1 135 375 136 34 137 1 138 375 139 1 140 1 141 375 142 1 143 154 144 375 145 1 146 1 147 375 148 1 149 1 150 375 151 1 152 1 153 408 154 154 155 1 156 375 157 1 158 1 159 375 160 1 161 1 162 375 163 1 164 1 165 528 166 1 167 1 168 375 169 1 170 34 171 375 172 1 173 1 174 375 175 1 176 154 177 375 178 1 179 1 180 375 181 1 182 1 183 375 184 1 185 1 186 375 187 187 188 1 189 375 190 1 191 1 192 375 193 1 194 1 195 375 196 1 197 1 198 528 199 1 200 1 201 375 202 1 203 1 204 408 205 1 206 1 207 375 208 1 209 154 210 375 211 1 212 1 213 375 214 1 215 1 216 375 217 1 218 1 219 375 220 154 221 34 222 375 223 1 224 1 225 375 226 1 227 1 228 375 229 1 230 1 231 528 232 1 233 1 234 375 235 1 236 1 237 375 238 34 239 1 240 375 241 1 242 154 243 375 244 1 245 1 246 375 247 1 248 1 249 375 250 1 251 1 252 375 253 154 254 1 255 408 256 1 257 1 258 375 259 1 260 1 261 375 262 1 263 1 264 528 265 1 266 1 267 375 268 1 269 1 270 375 271 1 272 34 273 375 274 1 275 154 276 375 277 1 278 1 279 375 280 1 281 1 282 375 283 1 284 1 285 375 286 154 287 1 288 375 289 34 290 1 291 375 292 1 293 1 294 375 295 1 296 1 297 528 298 1 299 1 300 375 301 1 302 1 303 375 304 1 305 1 306 408 307 1 308 154 309 375 310 1 311 1 312 375 313 1 314 1 315 375 316 1 317 1 318 375 319 154 320 1 321 375 322 1 323 34 324 375 325 1 326 1 327 375 328 1 329 1 330 528 331 1 332 1 333 375 334 1 335 1 336 375 337 1 338 1 339 375 340 34 341 154 342 375 343 1 344 1 345 375 346 1 347 1 348 375 349 1 350 1 351 375 352 154 353 1 354 375 355 1 356 1 357 408 358 1 359 1 360 375 361 1 362 1 363 528 364 1 365 1 366 375 367 1 368 1 369 375 370 1 371 1 372 375 373 1 374 187 375 375 376 1 377 1 378 375 379 1 380 1 381 375 382 1 383 1 384 375 385 154 386 1 387 375 388 1 389 1 390 375 391 34 392 1 393 375 394 1 395 1 396 528 397 1 398 1 399 375 400 1 401 1 402 375 403 1 404 1 405 375 406 1 407 154 408 408 409 1 410 1 411 375 412 1 413 1 414 375 415 1 416 1 417 375 418 154 419 1 420 375 421 1 422 1 423 375 424 1 425 34 426 375 427 1 428 1 429 528 430 1 431 1 432 375 433 1 434 1 435 375 436 1 437 1 438 375 439 1 440 154 441 375 442 34 443 1 444 375 445 1 446 1 447 375 448 1 449 1 450 375 451 154 452 1 453 375 454 1 455 1 456 375 457 1 458 1 459 408 460 1 461 1 462 528 463 1 464 1 465 375 466 1 467 1 468 375 469 1 470 1 471 375 472 1 473 154 474 375 475 1 476 34 477 375 478 1 479 1 480 375 481 1 482 1 483 375 484 154 485 1 486 375 487 1 488 1 489 375 490 1 491 1 492 375 493 34 494 1 495 528 496 1 497 1 498 375 499 1 500 1 501 375 502 1 503 1 504 375 505 1 506 154 507 375 508 1 509 1 510 408 511 1 512 1 513 375 514 1 515 1 516 375 517 154 518 1 519 375 520 1 521 1 522 375

いくつかの数に対するFermatテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 FermatテストOK 赤 FermatテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

p p x x p x 2 = 1(mod p) (x 1)(x + 1) = 0(mod p) x 1 = 0(mod p) x + 1 = 0(mod p) x = ±1(mod p)

p p d a d = 1(modn) 0 i < s, a 2id = 1(modn)

a d 1(mod n) 0 i < s, a 2id 1(modn) p

d a d 1(mod n) 0 i < s, a 2id 1(modn)

p p

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

いくつかの数に対するMRテスト n 素数か否かによってかなり状況は異なる 555 合成数 青 MRテストOK 赤 MRテストNG 557 素数 559 合成数 561 合成数 カーマイケル数 563 素数

O ((log n) 7.5 )

R. L. Rivest, A. Shamir, and L. Adelman: A method for obtaining digital signature and public-key cryptsystems. MIT Laboratory for Computer Science Technical Memo LCS/TM82; April 4,1977 (Revised December 12,1977).

pq n p q n e de n d m m e (m e ) d = m de mod

de = 1(mod n ) c = m e (mod n) c d = (m e ) d = m ed (mod n) m n = (m q 1 ) p 1 = 1(mod p) m n = (m p 1 ) q 1 = 1(mod q) de = n k + 1 m n 1 = 0(mod pq) m de = m n k+1 = (m n ) k m = m (mod pq)

n = pq e d d e e d

public static BigInteger find_a_prime_number(biginteger start, Random r){ BigInteger ii = start.subtract( one ); while ( true ){ ii = ii.add( one ); if (ii.remainder( two ).equals( zero ) ) continue; if (ii.remainder( three ).equals( zero ) ) continue; if (ii.remainder( five ).equals( zero ) ) continue; if (miller( ii, r )) return (ii ); } /* while */ }

public static void main2(string [] args){ } init(); Random r = new Random(22345); BigInteger a = new BigInteger( 300, r ); BigInteger b = new BigInteger( 300, r ); a = find_a_prime_number( a, r ); b = find_a_prime_number( b, r ); System.out.println( "a = " + a ); System.out.println( "b = " + b ); BigInteger n = a.multiply( b ); BigInteger n_prime = (a.subtract(one)).multiply( b.subtract(one) ); System.out.println( "n = " + n ); System.out.println( "n' = " + n_prime ); BigInteger d = find_a_prime_number(new BigInteger( 500, r ), r); BigInteger e = d.modinverse( n_prime ); System.out.println( "d = "+ d ); System.out.println( "e = "+ e ); BigInteger c = new BigInteger( "123456789" ); BigInteger encoded = expmod( c, d, n ); BigInteger decoded = expmod( encoded, e, n); System.out.println( "c = " + c ); System.out.println( "encoded =" + encoded); System.out.println( "decoded =" + decoded);

a = 166668074238319095483313546042990947432076135127096026513645272376316331039 0684907534046963 b = 133305618380379397594032562225703265024920539136097753572566920240751206711 0208280674803709 n = 222177907006061079815334359575730124160828951112884349135332485574849003919 3214942879356598738082496922436614953035741355935697376042329330477481581435427 872841292885750574412585767 n' = 22217790700606107981533435957573012416082895111288434913533248557484900391 9321494287935659573834557073545168417957465866899357280607558669853968071931350 1702165915384857386203735096 d = 159040641995398294421005061364774427976103908828264615351996517961093247892 3382107137518716560033421324965621956837468331087014569786875435923450131581 e = 106752029135632100796995566769927316289821765733062164417281902269045941901 6782484543366633884189297779952793945667074200027960781289367191066456394493439 150150543111690733148025677 c = 123456789 encoded =1601848530662595872999393723670476854582212286579267673708220429161893 0941364830180121093431946431822904101539789696936671900827330147406873266524813 04260648899934855151235789789423 decoded =123456789