数学知识——质数

文章目录

  • 质数
    • 试除法
    • 分解质因数
    • 筛数法

质数

试除法

数学知识——质数_第1张图片
题目

给定n个正整数ai,判定每个数是否是质数。

题解
数学知识——质数_第2张图片

	static boolean is_prime(int n){
		if(n<2) return false;
		for(int i=2;i<=n/i;i++){
			if(n%i==0) return false;
		}
		return true;
	}

分解质因数

数学知识——质数_第3张图片

package Chapter4;
/**
 * 分解质因数
 * @author vccyb
 *
 */
import java.io.*;
import java.util.*;
public class P867 {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		while(m-->0){
			int n = sc.nextInt();
			for(int i=2;i<=n/i;i++){
				if(n%i==0){
					int s = 0;
					while(n%i==0){
						n/=i;
						s++;
					}
					System.out.println(i+" "+s);
				}
			}
			if(n>1)System.out.println(n+" "+"1");
			System.out.println();
		}
	}
	

}

筛数法

package Chapter4;

import java.util.Scanner;

public class P868 {
	
	static final int N = 1000010;
	static int[] prime = new int[N];
	static int cnt;
	static boolean[] st = new boolean[N];
	
	//1. 朴素筛法
	static void get_primes(int n){
		for(int i=2;i<=n;i++){
			if(!st[i]){
				System.out.print(i+" ");
				prime[cnt++] = i;
			}
			for(int j=i+i;j<=n;j+=i){
				st[j] = true;
			}
		}	
		System.out.println();
	}
	
	//2. 埃式筛法
	static void get_primes2(int x){
        //埃式筛法
        for(int i=2; i<=x; i++){
            if(st[i]) continue;
            prime[cnt++] = i;
            System.out.print(i+" ");
            for(int j=i+i; j<=x; j+=i){
                st[j] = true;
            }
        }
		System.out.println();
	}
	
	//3. 线性筛法  最快  10^7 左右比埃式筛法 快一倍
	static void get_primes3(int x){
		for(int i=2;i<=x;i++){
			if(!st[i]){
				prime[cnt++] = i;
				System.out.print(i+" ");
			}
			
			for(int j=0;prime[j]<=x/i;j++){
				st[prime[j]*i] = true;
				if(i%prime[j]==0) break;
			}
		}
		System.out.println();
	}
	
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n  = sc.nextInt();
		get_primes3(n);
		System.out.println(cnt);
	}
}

你可能感兴趣的:(算法学习)