1. 程式人生 > >判斷大數是否是素數問題

判斷大數是否是素數問題

判斷一個素數的方法首先要從素數的定義來看,一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。來自百度百科。這就可以看出我們要判斷是否素數只要for(2<= i < num), if num%2 == 0. return it is a primer number. otherwise it is a composite number.

附上簡單code.

def isPrimer(num):
	for i in range(2, int(math.sqrt(num)) + 1):
		if num % i == 0:
			return False
		return True
PS:當然這裡沒有做關於1和2的判斷。

下面我們來討論對於大數的素數判斷問題。何為大數1233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222222222222222222如果我們對於上面的數字的math.sqrt()做迴圈運算,看起來不是一個好主意。這裡我們就要祭出今天的一個主要話題,當然這個要回歸到數學問題了。費馬小定理【對於任意的a<p 如果a^(p-1)=1(mod p)成立,那麼我們認為p是一個素數】

。可以找一些例子來驗證:

2^2 = 1(mod 3) yes. so 3 primer number.

2^3 = 1(mode 4) error. so 4 is composite number

2^4 = 1(mode 5) yes. so 5 is primer number

那麼我們似乎只要套用一下這個公式就可以了。no。求一個2^p當p足夠大的時候,這裡似乎比上面的迴圈更加可怕。但是有了冪模運算,這個問題有可以得到解決:

(a^b)%c = ((a%c)^b)%c.

這樣我們的問題就可以簡單的解決了

 another code with c sharp;

 static int GetMod(int a, int b, int n)
        {
            int ret = 1;
            while (0 != b--)
            {
                ret = a * ret % n;
            }
            return ret;
        }

if 上面的function return 1. so it is a primer. otherwise it is a composite number.

ok, 通過這些我們完成了一個數字的素數判斷。 看起來還是很有意思的。嘎嘎、

相關推薦

一種判斷大數是否為素數的方法

判斷大數是否為素數在很多題中有所涉及,也一直讓我很頭疼。我在網上搜集了一些資料,有很多方法可以用來判斷,我找到的方法中複雜度最低的是利用小費馬定理來判斷,但苦於水平不夠,對這種方法的理解陷入了雲裡霧裡的狀態。但下面我要提到的這種方法比較易懂,適用的數夠大(long long

判斷大數是否是素數問題

判斷一個素數的方法首先要從素數的定義來看,一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。來自百度百科。這就可以看出我們要判斷是否素數只要for(2<= i < num), if num%2 == 0. return it is a pr

Python小代碼_10_判斷是否為素數

clas pri post integer class log 代碼 輸出結果 col import math n = int(input(‘Input an integer:‘)) m = int(math.sqrt(n) + 1) for i in range(2,

POJ2689:Prime Distance(大數區間素數篩)

possible lib ios rop sel poj art eve led The branch of mathematics called number theory is about properties of numbers. One of the areas

大數素數

max strlen type esp mat 宏定義 with min const 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4

[Python程式設計]判斷和輸出素數的多種方法

1.for迴圈輸出100以內的素數 def get_prime_scope(scope=100): numlist = [] i = 2 for i in range(2, scope + 1): j = 2 for j in ra

cf Double Happiness(判斷是否為素數且為4k+1型)

2790. Double Happiness     time limit per test 3 seconds

python判斷是否為素數

 下面的自定義函式是判斷一個自然數是否為素數。利用的是6倍原理。一個自然數都能寫成6的形式。如:6K+N(0=<N<=5的整數)。N為0,2,3,4的時候6K+N能被1和本身以外的數整除,也就是一個數只有在除以6的時候餘數為1或者5的才有可能是素數。之所以說有可能是要排除掉25

Problem D: 判斷上三角矩陣

#include<stdio.h> int main() { int n,a[10][10],i,j; while(scanf("%d",&n)!=EOF) { int flag=1; //flag用來做自動判斷 for(

判斷迴文素數 java

程式碼 private static void funtion(int a) { // TODO Auto-generated method stub final int NUMBER_OP = 10; int mun = 2, total = 0; while (true) {

垃圾回收之判斷物件需要被回收(根搜尋演算法和引用搜索演算法)

根搜尋演算法(JAVA的虛擬機器用的是這個) 可以參考這個 http://blog.csdn.net/qq_15022971/article/details/79162126 引用搜索演算法:是常被初學JAVA者誤解,java的垃圾回收在判斷一個物件是否為可以被回收的物件時,常被誤以為

千萬級高效簡便判斷是否為素數,若為合數,向左右搜尋最近的素數。(非米勒羅賓素數測試演算法)

現在ZRain要讓n個孩子變成天使,每個孩子都有一個RP值,當RP值為一個質數時孩子就能變成天使。但是改變孩子的RP值是有代價的,比如rp從x改到y需要付出|x-y|的代價。ZRain真的太喜歡這些孩子了,他希望這些孩子都變成可愛的天使,但又希望付出最小的代價。   &nbs

poj 2689 Prime Distance(大數區間素數篩法)

題意:給定區間[L,R],求區間內距離最近的相鄰素數對和距離最遠的相鄰素數對,區間長度不超過1e6。 解題方案:用篩法求出[L,R]的所有素數——利用“合數n一定有小於或等於sqrt(n)的素數因子“這條性質,先預處理出sqrt(2,147,483,647)範圍內的所有素

LeetCode: 204. Count Primes判斷是否為素數的高效方法

連結: https://leetcode.com/problems/count-primes/#/description Description: Count the number of prime

c語言中判斷數字為素數

素數只能被1和它本身整除,所以只要遍歷[ 2 , x-1 ]就好了, 函式程式碼如下: int is_s(int a){ int is_s = 1; for(int i=2;i&

運用呼叫函式判斷是否為素數

#include<stdio.h> #include<math.h> int sp(int a) { if(a==0||a==1) return 0; else { for(int i=2; i

素數判斷大數據,大規模)

等等 border borde 如何快速 tab 直接 輾轉相除法 整除 center 素數的判斷其實誰都會,所以這篇跳過簡單的素數判斷,直接學習如何快速判斷1到N的素數,以及判斷大數據是否為素數。 現在我們先學習埃氏篩選法,此法實用與大規模判斷素數,比如1到N的素數有

判斷一個大數是否是素數 - 1186 質數檢測 V2

1186 質數檢測 V2 1 秒   131,072 KB   40 分   4 級題 給出1個正整數N,檢測N是否為質數。如果是,輸出"Yes",否則輸出"No"。  收起 輸入 輸入一個數N

算個尤拉函式給大家助助興(米勒拉賓(判斷素數)+Pollard_rho(求一個大數的因子 ))

這篇部落格講的很好: 題目描述 木南有一天學習了尤拉函式,知道了對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目。那麼他定義f(n)為有多少個小於等於n的數可以整除n。 例如f(4)=3。(可以被1,2,4整除)。 那麼你可以寫個程式計算一下f(n)嗎?

(模板)米勒羅賓素數測試(大數素數判斷)&&搜尋離合數最近的素數

現在ZRain要讓n個孩子變成天使,每個孩子都有一個RP值,當RP值為一個質數時孩子就能變成天使。但是改變孩子的RP值是有代價的,比如rp從x改到y需要付出|x-y|的代價。ZRain真的太喜歡這些孩子了,他希望這些孩子都變成可愛的天使,但又希望付出最小的代價。   &nbs