package test;
import java.util.Scanner;
public class TestPrime {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数");
int num=sc.nextInt();
System.out.println("所求素数范围是 2-"+num);
int index=0; //够10个换行输入
for(int i=2;i<=num;i++){
if(i<=7){
switch(i){
case 2:
System.out.print(i+" ");
index++;
break;
case 3:
System.out.print(i+" ");
index++;
break;
case 5:
System.out.print(i+" ");
index++;
break;
case 7:
System.out.print(i+" ");
index++;
break;
}
}else{
if(i%2==0 || i%3==0 || i%5==0 || i%7==0){
continue;
}
else{
System.out.print(i+" ");
index++;
if(index%10==0){
System.out.println();
}
}
}
}
}
}
for(int i=2;i<=num;i++)
{
for(int j=2;j<i;j++)
{
if(i%j==0 ) break;
}
if(j>=i)
{
System.out.print(i+" ");
index++;
if(index%10==0)
{
System.out.println();
}
}
}
算法不对 这都是啥啊
for(int i=2;i<=num;i++)
{
int max=sqrt(i)+1;
for(int j=2;j<=max;j++)
{
if(i%j==0 ) break;
}
if(j==max)
{
System.out.print(i+" ");
index++;
if(index%10==0)
{
System.out.println();
}
}
}
简单的学会了,再学复杂的,最简单的是循环,
public class ZhiShu {
public static void main(String[] args) {
// 求100以内的质数
for (int i = 2; i <= 100; i++) { // 质数
for (int k = 2; k <= i; k++) { // 除数
// 排除所有在 i=k 之前 能被k整除(余数为0)的数
if (i % k == 0 && i != k) {
break;
}
// 输出所有在 i=k 且 i%k=0的数
if (i % k == 0 && i == k) {
System.out.println(i);
}
}
}
}
}
稍微复杂一点的是筛选法
import java.util.ArrayList;
import java.util.Scanner;
public class SieveMethod {
int limits;
ArrayList number = new ArrayList();
SieveMethod() {
limits = 0;
}
private void setLimits(int lim) {
limits = lim;
for (int i = 2; i <= lim; i++) {
number.add(i);
}
}
private void getPrime() {// 筛选出素数
for (int i = 0; i < number.size(); i++) {
for (int j = i + 1; j < number.size(); j++) {
if (number.get(j) % number.get(i) == 0) {
number.remove(j);
j--;
}
}
}
}
private void printPrime() {// 打印出素数
for (int i = 0; i < number.size(); i++) {
System.out.print(number.get(i) + " ");
}
}
public static void main(String[] args) {
SieveMethod prime = new SieveMethod();
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
prime.setLimits(num);
prime.getPrime();
prime.printPrime();
}
}
最后是动态规划
public static List<Integer> ListPrime(int n) {
/*
* false为质数,true为合数
*/
boolean[] primeList = new boolean[n + 1];
for (int i = 2; i <= n; i++) {
if (!primeList[i]) {
int j = i * i;
if (j > n) // 所有合数都已被标记
break;
if (i > 2) {
/*
* 将所有能被此质数整除的奇数标记为合数
*/
while (j <= n) {
primeList[j] = true;
j = j + i + i;
}
} else {
/*
* 将所有大于2的偶数标记为合数
*/
while (j <= n) {
primeList[j] = true;
j = j + i;
}
}
}
}
List<Integer> listPrime = new LinkedList<Integer>();
if( n > 1 )
listPrime.add(2);
for (int i = 3; i <= n; i += 2) {
if (!primeList[i]) {
listPrime.add(i);
}
}
System.out.println(listPrime.size());
return listPrime;
}
脑子晕了, 我的是错的。算法不对。
明白怎么回事了。
多谢了