埃拉托色尼筛选法如何高效寻找素数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计699个文字,预计阅读时间需要3分钟。
Java代码,请参考关于天天向上向荣提出的问题的讨论。由于我没有Java环境,无法直接运行Java代码,以下是一个简单的示例,展示如何将月生无界和tcxu的求素数数目的Java代码翻译成PHP。
Java代码示例(假设):javapublic class PrimeCounter { public static void main(String[] args) { int[] numbers={月生无界, tcxu}; for (int number : numbers) { System.out.println(Number: + number + , Prime Count: + countPrimes(number)); } }
private static int countPrimes(int number) { int count=0; for (int i=2; i <=number; i++) { if (isPrime(i)) { count++; } } return count; }
private static boolean isPrime(int number) { if (number <=1) { return false; } for (int i=2; i <=Math.sqrt(number); i++) { if (number % i==0) { return false; } } return true; }}
PHP代码翻译:php
function isPrime($number) { if ($number <=1) { return false; } for ($i=2; $i <=sqrt($number); $i++) { if ($number % $i==0) { return false; } } return true;}
$numbers=array(月生无界, tcxu);foreach ($numbers as $number) { echo Number: . $number . , Prime Count: . countPrimes($number) . \n;}?>
请注意,由于月生无界和tcxu是具体的数值,您需要在PHP代码中将其替换为实际的数字。此外,这段PHP代码假定您已经定义了这两个变量的值。
Java代码,请参看关于“天天向上欣欣向荣"提出的问题的讨论www.oschina.net/question/2804915_2181302
因为,我这里没安装Java环境,故将"月生无界"和“tcxu"的求素数的Java代码,翻译成PHP,以验证它们的正确性。
结果证明,此处的PHP代码可用。tcxu所示的代码,称为:埃拉托色尼筛选法(SieveofEratosthenes)求素数
1.[代码][HTML]代码
<html> <head> <meta charset="gb2312"> <title>求1000以内的素数</title> <style> </style> </head> <body> <?php define (N,1000); $num = "一千以内的素数 prime numbers less than ".N." : <br>"; // 根据 月生无界 提出的求素数的方法 for($i=2;$i<N;$i++){ //特殊值处理 if($i == 2){ $num .= $i.","; //System.out.println("素数:"+i); }else{//素数判断条件,从2开始除,取余,如果余值为0,表示不是素数,跳出这个数的循环判断, for($j=2;$j<$i;$j++){ if($i%$j == 0){ break; } //判断是否是素数,能除到比该值小一,且余数不为0,肯定是素数 if($i%$j != 0 && $j == $i-1){ $num .= $i.","; } } } } echo $num."<br>"; //根据 tcxu 出示的 埃拉托色尼筛选法 for($i=0;$i<N;$i++) $b[$i]=true; //将数组的元素全部赋以true for ( $i = 2; $i < N; $i++ ) // 从下标2开始递增循环 if ( $b[ $i ] ==true){// 每次找到值为true的元素 for ($j = $i + 1; $j <N; $j++ ){ /* 就用其下标作为除数,去除往后余下的元素的下标*/ if ( $j % $i == 0 ) //一旦能除尽 $b[ $j ] = false;// 将对应的元素值改为false } } for ( $i = 2; $i < N; $i++ )//从2起,打印50以内的质数 if ( $b[ $i ] ) //若元素值为true echo $i.","; // 打印出该元素的下标 ?> </body> </html>
本文共计699个文字,预计阅读时间需要3分钟。
Java代码,请参考关于天天向上向荣提出的问题的讨论。由于我没有Java环境,无法直接运行Java代码,以下是一个简单的示例,展示如何将月生无界和tcxu的求素数数目的Java代码翻译成PHP。
Java代码示例(假设):javapublic class PrimeCounter { public static void main(String[] args) { int[] numbers={月生无界, tcxu}; for (int number : numbers) { System.out.println(Number: + number + , Prime Count: + countPrimes(number)); } }
private static int countPrimes(int number) { int count=0; for (int i=2; i <=number; i++) { if (isPrime(i)) { count++; } } return count; }
private static boolean isPrime(int number) { if (number <=1) { return false; } for (int i=2; i <=Math.sqrt(number); i++) { if (number % i==0) { return false; } } return true; }}
PHP代码翻译:php
function isPrime($number) { if ($number <=1) { return false; } for ($i=2; $i <=sqrt($number); $i++) { if ($number % $i==0) { return false; } } return true;}
$numbers=array(月生无界, tcxu);foreach ($numbers as $number) { echo Number: . $number . , Prime Count: . countPrimes($number) . \n;}?>
请注意,由于月生无界和tcxu是具体的数值,您需要在PHP代码中将其替换为实际的数字。此外,这段PHP代码假定您已经定义了这两个变量的值。
Java代码,请参看关于“天天向上欣欣向荣"提出的问题的讨论www.oschina.net/question/2804915_2181302
因为,我这里没安装Java环境,故将"月生无界"和“tcxu"的求素数的Java代码,翻译成PHP,以验证它们的正确性。
结果证明,此处的PHP代码可用。tcxu所示的代码,称为:埃拉托色尼筛选法(SieveofEratosthenes)求素数
1.[代码][HTML]代码
<html> <head> <meta charset="gb2312"> <title>求1000以内的素数</title> <style> </style> </head> <body> <?php define (N,1000); $num = "一千以内的素数 prime numbers less than ".N." : <br>"; // 根据 月生无界 提出的求素数的方法 for($i=2;$i<N;$i++){ //特殊值处理 if($i == 2){ $num .= $i.","; //System.out.println("素数:"+i); }else{//素数判断条件,从2开始除,取余,如果余值为0,表示不是素数,跳出这个数的循环判断, for($j=2;$j<$i;$j++){ if($i%$j == 0){ break; } //判断是否是素数,能除到比该值小一,且余数不为0,肯定是素数 if($i%$j != 0 && $j == $i-1){ $num .= $i.","; } } } } echo $num."<br>"; //根据 tcxu 出示的 埃拉托色尼筛选法 for($i=0;$i<N;$i++) $b[$i]=true; //将数组的元素全部赋以true for ( $i = 2; $i < N; $i++ ) // 从下标2开始递增循环 if ( $b[ $i ] ==true){// 每次找到值为true的元素 for ($j = $i + 1; $j <N; $j++ ){ /* 就用其下标作为除数,去除往后余下的元素的下标*/ if ( $j % $i == 0 ) //一旦能除尽 $b[ $j ] = false;// 将对应的元素值改为false } } for ( $i = 2; $i < N; $i++ )//从2起,打印50以内的质数 if ( $b[ $i ] ) //若元素值为true echo $i.","; // 打印出该元素的下标 ?> </body> </html>

