关于素数的简单算法整理

来源:互联网 发布:斐波那契数列java递归 编辑:程序博客网 时间:2024/06/06 04:17
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);    }}
0 0
原创粉丝点击