黑马程序员技术交流社区
标题:
如何用编程来统计1到100里的素数,感觉没啥规律!!!
[打印本页]
作者:
YMW
时间:
2016-6-9 12:34
标题:
如何用编程来统计1到100里的素数,感觉没啥规律!!!
前几天看到一个题目,请用编程统计1到100里的素数,开始就懵了,我连素数都不知道,素数和质数有区别吗?感觉没什么规律可以找,反正就是编了下,感觉没错误但是就是输出不了结果,有大神能给个比较简单的程序吗,不要太复杂了 谢谢
作者:
ancheng
时间:
2016-6-9 12:45
public class isPrime2 {
public static void main(String[] args) {
// 在素数中除了2,其他都是奇数,所以初始值如果为奇数并大于2,便可以只判断奇数以提高效率
for (int i = 101; i <= 999; i += 2) {
boolean flag = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if(flag){
System.out.println(i);
}
}
}
}
复制代码
作者:
ancheng
时间:
2016-6-9 12:46
import java.util.Scanner;
public class IsPrime {
private static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in);
long n = sc.nextLong();
if(isPrime(n)){
System.out.println(n+" 是素数");
}else{
System.out.println(n+ " 不是素数");
}
}
public static boolean isPrime(long n) {
if (n <= 3) {
return n > 1;
}
if (n % 2 == 0 || n % 3 == 0) {
return false;
}
for (int i = 5; i <= Math.sqrt(n); i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
}
复制代码
作者:
ancheng
时间:
2016-6-9 12:48
//第三种解法(筛选法)
public class Ancheng {
public static void main(String[] args) {
boolean[] arr = new boolean[1000];
arr[2] = true;
for (int i = 2; i < arr.length; i++) {
if (i % 2 == 1) {
arr[i] = true;
}
}
for (int i = 3; i < 1000 / 2; i += 2) {
if (arr[i]) {
for (int j = 2 * i; j < 1000; j += i) {
arr[j] = false;
}
}
}
for (int i = 101; i < 1000; i++) {
if (arr[i]) {
System.out.println(i);
}
}
}
}
复制代码
作者:
YMW
时间:
2016-6-9 13:42
ancheng 发表于 2016-6-9 12:48
谢谢大神指点
作者:
黑猫的消失
时间:
2016-6-9 13:54
好多不同的思路,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2