计算1-x内的素数, 结果保存在mysql中。
要求:
1. 使用y个线程计算
2. 尽量优化算法
3. x和y可配置
单线程
判断质数和循环遍历给定的范围,代码都写在一个“主类”的main函数里,适合用于理解"判断1个正整数是否为质数"的方法体。
/**
* 键盘输入一个数字x,求出1~x中间的所有质数
*/
public class TestZhishu {
public static void main(String[] args) {
System.out.println("----程序开始运行----");
// 通过键盘输入x和y的参数数值
Scanner sc = new Scanner(System.in);
System.out.println("请输入求解参数x:");
int x = sc.nextInt();
System.out.println("请输入配置参数y:");
int y = sc.nextInt();
//调用本类里的方法的算法求结果并打印输出,单线程
List<Integer> list1 = qiuZhishu(x);
System.out.println(list1);
}
/**
* 从1开始遍历直到正整数x
* @param x
* @return
*/
public static List<Integer> qiuZhishu(int x) {
List<Integer> list = new ArrayList<Integer>();
//实际求解质数的算法被循环调用
//从1开始遍历
for( int i=1; i<=x;i++){
if( isPrime(i) ){
//把符合条件的质数放到容器里
list.add(i);
}
}
return list;
}
/**
* 判断一个正整数是否为质数
* @param num
* @return
*/
public static boolean isPrime(int num) {
double sqrt = Math.sqrt(num);
if (num < 2) {
return false;
}
if (num == 2 || num == 3) {
return true;
}
if (num % 2 == 0) {// 先判断是否为偶数,比2大的偶数都不是质数
return false;
}
for (int j = 3; j <= sqrt; j+=2) {
if (num % j == 0) {
return false;
}
}
return true;
}
}
多线程
1、数据库设计
-- 创建数据库yiqibing
CREATE DATABASE yiqibing DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 使用创建的这张数据库表用于持久化
use yiqibing;
-- 表头的字符串用` `括起来
CREATE TABLE `Number`(
`id` int NOT NULL AUTO_INCREMENT ,
`num_x` INTEGER NOT NULL ,
`num_y` INTEGER NOT NULL ,
`answers` VARCHAR(21840) NULL,
PRIMARY KEY (`id`)
);
2、实体类
package com.yiqibing.pojo;
import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "Number")
public class Number {
@KeySql(useGeneratedKeys = true)
@Id