1、梅森尼数
import java.util.ArrayList;
public class text6 {
/**
* 梅森尼数(2的N次方减一是素数,N也必须是素数)
*/
private static ArrayList<Integer> list = new ArrayList<Integer>();
private static ArrayList<Integer> list1 = new ArrayList<Integer>();
public static void main(String[] args) {
// 求出(2的30次方的所有情况)
fun();
fun2();
System.out.println("2的30次方以内的所有情况:");
show();
}
// 求出1~30所有的素数并存放在list里面
public static void fun() {
for (int i = 1; i < 30; i++) {
if (fun1(i)) {
list.add(i);
}
}
}
// 判断数字是否素数
public static boolean fun1(int k) {
int i;
for (i = 2; i < k; i++) {
if (k % i == 0) {
return false;
}
}
if (i == k) {
return true;
}
return false;
}
// 按照题目要求求出所有的梅森尼数保存在list1中
public static void fun2() {
for (int i = 0; i < list.size(); i++) {
if (fun1((int) (Math.pow(2, list.get(i)) - 1))) {
list1.add(list.get(i));
}
}
}
// 按照题目要求打印
public static void show() {
for (int i = 0; i < list1.size(); i++) {
// int sum=(int) (Math.pow(2, list1.get(i))-1);
System.out.println("2^" + list1.get(i) + "-1="
+ (int) (Math.pow(2, list1.get(i)) - 1));
}
}
}
2、哥德巴赫猜想(任何大于2的偶数都能表示为两个素数之和)
package com.fit.getPingyin;
import java.util.ArrayList;
public class text8 {
/**
* 等差素数数列
*/
private static ArrayList<Integer> list = new ArrayList<Integer>();
public static void main(String[] args) {
fun();
System.out.println("100以内所有的等差素数数列:");// 最多只能解决100以内,其他不敢保证,存在问题
fun2();
}
// 求出1~100所有的素数并存放在list里面
public static void fun() {
for (int i = 1; i < 100; i++) {
if (fun1(i)) {
list.add(i);
}
}
}
// 判断数字是否素数
public static boolean fun1(int k) {
int i;
for (i = 2; i < k; i++) {
if (k % i == 0) {
return false;
}
}
if (i == k) {
return true;
}
return false;
}
// 根据条件求出所有的等差素数数列(还需要改进,存在漏洞)
public static void fun2() {
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
for (int k = 2; k < list.size(); k++) {
if (list.get(i) - list.get(j) == list.get(j) - list.get(k)
&& list.get(i) != list.get(j)) {
System.out.print(list.get(i) + "," + list.get(j) + ","
+ list.get(k) + " ");
if (list.get(i) - list.get(j) < 0) {
System.out.println("公差为:"
+ (-(list.get(i) - list.get(j))));
} else {
System.out.println("公差为:"
+ (list.get(i) - list.get(j)));
}
}
}
}
}
}
}
3.第100002个素数
public class text1 {
/**
* 第100002个素数
*/
public static void main(String[] args) {
int arr[] = new int[1500000];
int n = 1;
for (int i = 2; i < 1500000; i++) {
for (int j = i * 2; j < 1500000; j = j + i) {
arr[j] = 1;
}
}
for (int i = 2; i <= 100002; i++) {
while (arr[n = n + 2] == 1)
;
}
System.out.println(n);
}
}