求素数&素数筛
求素数
public class Main {
public static void main(String[] args) {
for (int i = 2; i < 1000; i++) {
if (isSimple(i)){
System.out.println(i);
}
}
}
public static boolean isSimple(int num){
boolean flag = false;
for (int i = 2; i <= Math.sqrt(num); i++) {
if(num%i==0){
return false;
}
}
return true;
}
}
素数筛
1.埃及筛的时间复杂度
public static void main(String[] args) {
isPrime
int MAX_NUM = 100; //前多少个元素的个数
boolean[] isPrime = new boolean[MAX_NUM + 1]; //isPrime数组是用来存储素数情况,isPrime[i]为0,则表示i为素数
初始情况下全部为0,开始假设所有数都是素数
for (int i = 2; i <= MAX_NUM; i++) { //每次将一个素数的所有倍数标记为非素数
if (isPrime[i] == false) {
for (int j = i * 2; j < MAX_NUM; j+=i) {
isPrime[j] = true;
}
}
}
for (int i = 2; i < isPrime.length-1; i++) {
if(isPrime[i]==false){
System.out.println(i);
}
}
}
2.欧拉筛,也叫线性筛
package reflex;
import java.util.Scanner;
public class Euler {
static int N = (int) 1e6; //可以满足输入的最大数字 最大数字1e9
static boolean[] st = new boolean[N]; //记录的输入数字之前的素数和合数的情况,初始化默认是false,代指质数
static int[] primes = new int[N]; //将所有的素数存入该列表
static int k = 0;
public static void getPrimes() {
欧拉筛
for (int i = 2; i < N; i++) {
if (!st[i]) {
primes[k++] = i;
}
for (int j = 0; primes[j] * i < N; j++) { //2,3,5,7.....
//每个合数 只被最小的质因子筛掉 如8是被i=4时,被2筛掉
st[i * primes[j]] = true;
// 1.若i%primes[j]!=0,i中的最小质因子都是比primes[j]大,i*primes[j]这个数的最小质因子
// 2.若i%primes[j]==0,primes[j]是i的最小质因子,i*primes[j]的最小质因子
if (i % primes[j] == 0) break; //已经是最小质因子筛掉了,所以退出
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
getPrimes();
while (scanner.hasNext()) {
int cnt = 0;
// 统计质数的次数
int n = scanner.nextInt();
for (int i = 0; i < k && primes[i] < n; i++) {
while (n % primes[i] == 0) {
cnt++;
n = n / primes[i];
}
}
if (n > 1) cnt++;
System.out.println(cnt);
}
scanner.close();
}
}
参考:https://zhuanlan.zhihu.com/p/100051075
https://www.bilibili.com/video/BV1nF411a7DF?from=search&seid=13183924924456838690&spm_id_from=333.337.0.0
作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)