3月4号蓝桥杯训练总结

埃氏筛法求素数集

埃拉托色尼算法工作原理:

1.假定范围内的所有的数都是素数

2.我们从2开始,只要是2的倍数我们就认为该数不是素数,打标处理

3.直到判断到n为止我们就可以将所有的非素数打上标记,从而确定了所有的非素数

代码

	static void isprim(int a,int b) { //求a与b区间内的素数 
		for(int i=0;i<=b;i++)isPrim[i]=true;
		isPrim[0]=isPrim[1]=false;
		int index=0;
		for(int i=2;i<=b;i++) {
			if(isPrim[i]) {
				if(i>=a)
				prim[index++]=i;
				for(int j=2*i;j<=b;j+=i)
					isPrim[j]=false;
			}
		}
	}

素数判断

每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个数的因子,把一个合数用质因子相乘的形式表现出来,叫做分解质因子。
分解质因子只针对合数。
合数:除了1和0以外,可以被1和本身之外的数整除的数
质数(素数):除了1和0以外,只能被1和本身整除的数

	// 判断一个数是否为素数
	static boolean is_prim(int a) {
		for(int i=2;i<=Math.sqrt(a);i++) {
			if(a%i==0)
				return false;
		}
		return true;
	}

试题 基础练习 分解质因数

思路:先找到最小的质数k,如果k=n,那么就直接输出;如果k<n,那么k/=n,然后继续如此操作

代码

import java.util.Arrays;
import java.util.Scanner;

public class 基础练习_分解质因数 {
	static Scanner scanner=new Scanner(System.in);
	static int[] arr=new int[20];
	static int start=0;
	static int a,b;
	// 判断一个数是否为素数
	static boolean is_prim(int a) {
		for(int i=2;i<=Math.sqrt(a);i++) {
			if(a%i==0)
				return false;
		}
		return true;
	}
	// 找到合数的所有质因数
	static void solve(int a) {
		Arrays.fill(arr, 0); // 初始化最小质因数数组全为0
		start=0;  // 初始化起始位置
		while(a!=1) {
			for(int i=2;i<=a;i++) {
				if(a%i==0&&is_prim(i)) {
					arr[start++]=i;
					a/=i;
					break;
				}
			}
		}
	}
	public static void main(String[] args) {
		a=scanner.nextInt();
		b=scanner.nextInt();
		for(int i=a;i<=b;i++) {
			if(is_prim(i)) {
				System.out.println(i+"="+i);
			}else {
				solve(i);
				System.out.print(i+"=");
				for(int j=0;j<start;j++) {
					if(j==0) {
						System.out.print(arr[j]);
					}else {
						System.out.print("*"+arr[j]);
					}
				}
				System.out.println();
			}
		}
		}

}

学习参考:

https://blog.csdn.net/ltyqljhwcm/article/details/52835805 埃拉托色尼素数筛法

https://blog.csdn.net/qq_43721152/article/details/104617811 解题思路

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦码城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值