找素數的Eratosthenes演算法(篩選法)
關於Eratosthenes演算法的介紹點選 Eratosthenes 篩選求質數。下面是其程式碼實現
package day03; public class TestJava { public static void main(String[] args) { TestJava java = new TestJava(); //System.out.println(java.power(2, 12)); //java.hanuota('A', 'B', 'C', 3); //System.out.println(java.gcd(12, 36)); //java.printPrime2(10, 1000); java.printPrime(100); } //找出小於n的所有素數,Eratosthenes演算法 public void printPrime(int n) { boolean[] primes = new boolean[n + 1]; for (int i = 0; i < primes.length; i++) { primes[i] = true; } for (int i = 2; i <= n / i; i++) { if (primes[i]) { for (int j = i; j <= n / i; j++) { primes[i * j] = false; } } } int count = 0; for (int i = 2; i <= n; i++) { if (primes[i]) { count++; if (count % 10 == 0) { System.out.printf("%5d\n", i); } else { System.out.printf("%5d", i); } } } } //找出[m, n)區間的所有素數 public void printPrime2(int m, int n) { if (m < 2 || n <= m) { return; } int outputNums = 0; for (int i = m; i < n; i++) { boolean isPrime = true; int endN = (int) Math.sqrt(i); for (int k = 2; k <= endN; ++k) { if (i % k == 0) { isPrime = false; } } if (isPrime == true) { System.out.print(i + " "); if (++outputNums % 10 == 0) { System.out.println(); } } } } // 最小公約數 public int gcd(int m, int n) { while (n != 0) { int r = m % n; m = n; n = r; } return m; } public int gcd2(int m, int n) { return n == 0 ? m : gcd2(n, m % n); } // a的n次方 public int power(int a, int n) { if (n <= 0) { return 1; } if (n % 2 == 0) { return power(a * a, n / 2); } else { return (a * power(a * a, n / 2)); } } // 漢諾塔問題 private int i = 1; public void hanuota(char a, char b, char c, int n) { if (n == 1) { System.out.println(this.i++ + ": " + a + "->" + c); } else { hanuota(a, c, b, n - 1); System.out.println(this.i++ + ": " + a + "->" + c); hanuota(b, a, c, n - 1); } } }
相關推薦
找素數的Eratosthenes演算法(篩選法)
關於Eratosthenes演算法的介紹點選 Eratosthenes 篩選求質數。下面是其程式碼實現 package day03; public class TestJava { public static void main(String[] args) { T
打表解素數問題(篩選法)
1、最大素因子 #include<stdio.h> #define max 1000010 int a[max]={0}; void num_prime() { int i,j,x=0; for(i=2;i<max;i++) {
【演算法】3.Eratosthenes篩選法與尤拉篩選法求素數
Eratosthenes篩法 1.原理 一個合數可以分成幾個素數的和,如果把素數(最初只知道2)的倍數全都去掉,剩下的就都是素數了 2.思路分析 去除0,1(既不是素數又不是合數) 找到佇列中最小的素數,刪除其倍數 3.程式碼實現(只給出了函
找質數演算法之埃拉托色尼篩選法(Sieve of Eratosthenes演算法)
一、演算法原理 一個合數總是可以分解成若干個質數的乘積,那麼如果把質數(最初只知道2是質數)的倍數都去掉,那麼剩下的就是質數了。 二、步驟 (1)先把1刪除(1既不是質數也不是合數) (2)讀取
Eratosthenes篩選法求素數的演算法
public class Sieve{ public static void main(String[] args) { int max = 100; //假設求100以內的素數 boolean[] isPrime = new boolean[max+1
篩選法找素數
print rgs pre system span clas 篩選法 stat != 1 public class Test01 { 2 3 public static void main(String[] args) { 4 int[]
使用埃拉托色尼篩選法(the Sieve of Eratosthenes)在一定範圍內求素數及反素數(Emirp)
Programming 1.3 In this problem, you'll be asked to find all the prime numbers from 1 to 1000. Prime numbers are used in allkinds of circumstances, particu
程式基本演算法習題解析 使用篩選法求出1~100之內的所有素數
思路: 第一個素數是2,把後面是2的整數倍的數全部篩去,篩去的數置0;從第一個素數2向後找出最小的未被篩去的數3,把它後面是3的整數倍的數全部篩去並置0;重複上述過程,直到新找到的素數大於1
演算法提高 素數求和 藍橋杯 (篩選法)
/* 演算法提高 素數求和 問題描述 輸入一個自然數n,求小於等於n的素數之和樣例輸入2樣例輸出2資料規模和約定 測試樣例保證 2 <= n <= 2,000,000*/#include <stdio.h>#include <stdlib
Eratosthenes篩選法求小於N的所有素數個數
求出1~N範圍中所有的素數,在leetcode中做過這個題目,我想從對每個1~N進行一次遍歷,每個數判斷一次是否是素數。 判斷一個數是否是素數的複雜度本身也是挺高的,再進行一次迭代,在leetcode中的結果是超時: class Solution { p
篩選法求素數演算法
篩選法生成質數表(素數表)的基本思想如下: 假設有一個數組存放整數2 ~ N,如下所示: 首先將2的倍數篩去(實際操作時可以將陣列對應的值設定為0),得到: 然後將3的倍數篩去,得到: 再一次將5的倍數篩去,7的倍數篩去,11的倍數篩去......
演算法:埃拉托色尼篩選法求素數(Python和Java)
來自百度百科–埃拉托色尼篩選法: (1)先把1刪除(現今數學界1既不是質數也不是合數) (2)讀取佇列中當前最小的數2,然後把2的倍數刪去 (3)讀取佇列中當前最小的數3,然後把3的倍數刪去 (4)讀取佇列中當前最小的數5,然後把5的倍數刪去 (5)讀
Eratosthenes篩選法求素數
文章關鍵字:|Eratosthenes|篩選|素數| public class Sieve{ public static void main(String[] args) { int max = 100; //假設求100以內的素數 bool
藍橋杯-找素數【篩選法】
演算法提高 找素數 時間限制:1.0s 記憶體限制:256.0MB 問題描述 給定區間[L, R] , 請計算區間中素數的個數。 輸入格式 兩個數L和R。 輸
藍橋杯 演算法提高 找素數 【思維找素數 + 篩法】
時間限制:1.0s 記憶體限制:256.0MB 問題描述 給定區間[L, R] , 請計算區間中素數的個數。 輸入格式 兩個數L和R。 輸出格式 一行,區間中素數的個數。 樣例輸入 2 11 樣例輸
(轉載)O(N)的素數篩選法和歐拉函數
算法與數據結構 變形 技術 範圍 n) border {} 數據 eps 轉自:http://blog.csdn.net/dream_you_to_life/article/details/43883367 作者:Sky丶Memory 1.一個數是否為質數的判定.
素數篩選法
return img rim -a clas font clu als bool 素數篩選法 素數(又稱質數):指在大於一的自然數中,只能被1和它自身整除的自然數; 素數篩選法是指一種非常規的素數判定方法,比較高效率; 原理:任何數的整數倍必定不是素數,大於二的
篩選法求素數
return include main 技術 ret printf int images ima C語言 #include <stdio.h>#include <math.h>int main(){int i,j,a[100],N;scanf("
篩選法<求素數表>
spa 素數 表示 fine define pri bsp 遍歷 數組 如果題目的數據規模較大,常規地逐個判斷素數的方法行不通,可以使用篩選法進行預處理,將所有素數一次性求出並存入數組中。 篩選法求素數的主要思想如下: (1)將1~N的所有數都標記為素數,0表示素數,1表
【C語言】 利用篩選法求100以內的素數
演算法思路: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 程式碼如下: //C語言 篩選法求100以內的素數 //原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經