洛谷 B3969 [GESP202403 五级] B-smooth 数 题解

本文介绍了如何在埃氏筛法基础上改进算法,找出每个数的最大质因数,然后利用这些信息判断一组数是否满足特定条件,给出一个C++实现示例。
摘要由CSDN通过智能技术生成

思路

我们只要求出每个数的最大质因数,再一个个判断是否满足要求即可。

如何找到每个数的最大质因数呢?其实,我们可以在埃氏筛法的基础上进行改进,从而达到算出最大质因数的目的。

让我们先来了解一下埃氏筛法,知道的人可以跳过。埃氏筛法,首先定义一个 bool 型数组(初始全部赋值为 1 1 1,再后面我们用 f l a g flag flag 进行代替),如果 f l a g i flag_i flagi 2 ≤ i ≤ n 2\le i\le n 2in i i i 初始值为 2 2 2) 为 true,而由于 i i i 的倍数肯定包含质因数 i i i,所以就要依次将下标为 i i i 的倍数的位置的值都改成 false,最后将 i i i 的值加上 1 1 1。通过进行如上操作后, f l a g flag flag 数组中值为 true 的位置的下标即为质数。具体的代码如下:

for(int i=2;i<=n;++i) if(flag[i]) for(int j=i;j<=n;j+=i) flag[j]=false;

那么,如何进行改进呢?其实,我们可以不把下标为 i i i 的倍数的位置的值改成 false,而是改成 i i i,而 i i i 也就是它们当前的最大质因数,如果后面 i i i 加了若干个 1 1 1 之后还是它们之中任意个的质因数,则会更改其最大质因数为现在的 i i i。需要注意的一点是,由于埃氏筛的筛法变了,它的判断条件也将改变,并且由于 f l a g flag flag 所存储的类型改变成了 int 类型,所以也要将 f l a g flag flag 改成 int 类型。

code

#include<iostream>
using namespace std;
int n,b,Max[1000005]/*存储最大质因数*/,ans;
int main() {
	cin>>n>>b;
	Max[1]=1;
	for(int i=2;i<=n;++i) if(!Max[i]) for(int j=i;j<=n;j+=i) Max[j]=i;//找到最大质因数
	for(int i=1;i<=n;++i) if(Max[i]<=b) ++ans;//判断是否满足要求
	cout<<ans;
	return 0;
}
  • 31
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值