Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan PHP dan GMP untuk melaksanakan ujian keutamaan Fermat bagi nombor besar
Cara menggunakan PHP dan GMP untuk melaksanakan ujian keutamaan Fermat bagi nombor besar
Pengenalan:
Ujian primaliti Fermat ialah kaedah mudah untuk mengesan sama ada nombor adalah perdana. Kaedah ini berdasarkan teorem kecil Fermat, yang menyatakan bahawa jika p ialah nombor perdana dan a ialah integer positif kurang daripada p, maka a^(p-1) ≡ 1 (mod p). Teorem ini membolehkan kita menguji sama ada sesuatu nombor adalah perdana menggunakan a yang dipilih secara rawak. Dalam artikel ini, kami akan menggunakan perpustakaan PHP dan GMP untuk melaksanakan ujian keutamaan Fermat bagi nombor besar.
Pemasangan dan Persediaan:
Pertama, pastikan anda mempunyai perpustakaan PHP dan GMP dipasang pada sistem anda. Jika anda belum memasangnya lagi, anda boleh memasangnya dengan menjalankan arahan berikut dalam baris arahan:
sudo apt-get install php sudo apt-get install php-gmp
Seterusnya, buat fail bernama "fermat_prime.php" dan bukanya dengan editor teks.
Laksanakan fungsi ujian keutamaan Fermat:
Tambahkan kod berikut untuk melaksanakan fungsi ujian keutamaan Fermat:
<?php function is_prime($n, $k) { if ($n <= 1 || $n == 4) { return false; } if ($n <= 3) { return true; } while ($k > 0) { // 随机选择一个 [2, $n-2] 之间的整数 $a = gmp_random_range(2, $n-2); // 使用 GMP 函数进行幂运算 $res = gmp_powm($a, $n-1, $n); // 如果不满足费马小定理,则 n 不是素数 if (gmp_cmp($res, 1) != 0) { return false; } $k--; } return true; }
Harai kod:
is_prime
接受两个参数,$n是待测试的数,$k是测试的次数gmp_powm
进行幂运算。测试代码:
在代码文件的末尾添加以下代码来测试is_prime
Seterusnya, fungsi menggunakan gelung sementara untuk melaksanakan ujian $k. Dalam setiap gelung, fungsi secara rawak memilih integer positif antara 2 dan $n-2 dan menggunakan fungsi GMP gmp_powm
untuk eksponen.
Jika pengesahan Teorem Kecil Fermat diluluskan dalam ujian $k, fungsi itu kembali benar, menunjukkan bahawa nombor itu mungkin nombor perdana.
Uji kod:Tambah kod berikut pada penghujung fail kod untuk menguji kesan fungsi is_prime
:
// 测试1: 检测一个较小的素数 $n = gmp_init("17"); $k = 5; $result = is_prime($n, $k); echo $result ? "$n is probable prime " : "$n is not prime "; // 测试2: 检测一个较大的合数 $n = gmp_init("123456789123456789"); $k = 5; $result = is_prime($n, $k); echo $result ? "$n is probable prime " : "$n is not prime ";Simpan dan tutup fail. Jalankan kod:
Jalankan arahan berikut dalam baris arahan untuk melaksanakan fail kod:
php fermat_prime.phpSeterusnya, anda sepatutnya dapat melihat hasil output program dalam baris arahan:🎜
17 is probable prime 123456789123456789 is not prime🎜Kesimpulan:🎜Ini artikel menerangkan cara menggunakan pustaka PHP dan GMP untuk melaksanakan ujian keutamaan Fermat bagi nombor yang besar. Dengan ujian mudah ini, kita boleh mengetahui sama ada nombor yang lebih besar adalah perdana. Dengan menggunakan kaedah ini, kita boleh memahami Teorem Kecil Fermat dengan lebih baik dan dapat melaksanakan fungsi ujian primaliti asas. 🎜
Atas ialah kandungan terperinci Cara menggunakan PHP dan GMP untuk melaksanakan ujian keutamaan Fermat bagi nombor besar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!