首页 > 其他分享 >20240322每日一题题解

20240322每日一题题解

时间:2024-03-22 16:12:37浏览次数:16  
标签:prime int 题解 每日 sqrt 质数 20240322

20240322每日一题题解

Problem

输入 \(n\) 个不大于 \(10^5\) 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。

第一行输入一个正整数 \(n\),表示整数个数。

第二行输入 \(n\) 个正整数 \(a_i\),以空格隔开。

输出一行,依次输出 \(a_i\) 中剩余的质数,以空格隔开。

例如,输入

5
3 4 5 6 7

应当输出

3 5 7

注意数据范围:\(1\le n\le100\),\(1 \leq a_i \leq 10^5\)。

Solution

判断素数最最暴力的办法,就是枚举\([2,x-1]\)区间内有没有数字\(i\)使得\(x\equiv 0 \pmod i\)。

我们将这一循环判断写成函数,然后对于输入的每个数,调用函数判断其是否为质数。如果是质数,则输出这个数字;如果不是,则跳过。这样就不用把所有数据读取存入数组中了。

#include<iostream>
using namespace std;

bool judge_prime(int x)
{
	if(x==1) return 0;
	for(int i=2;i<x;i++)
	{
		if(x%i==0) return 0;
	}
	return 1;
}

int main()
{
	int n;cin>>n;
	for(int i=1,a;i<=n;i++)
	{
		cin>>a;
		if(judge_prime(a)) cout<<a<<" ";
	}
	return 0;
}

优化

其实我们不需要枚举\(i\in[2,x-1]\),只需要枚举\([2,\sqrt{x}]\)即可。因为x的因数一定是成对出现的(除了\(\sqrt x\)),并且如果一个因数\(p_i\le\sqrt x\),则定有其对应的因数\(\frac{x}{p_i}\ge \sqrt x\)​。

所以我们可以修改循环条件为i*i<=x

bool judge_prime(int x)
{
	if(x==1) return 0;
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0) return 0;
	}
	return 1;
}

再优化

可以将\(10^5\)以内的质数都预处理出来,使用到了埃氏筛

#include<iostream>
using namespace std;

bool prime[100010];//1表示不是质数,0表示是质数

int main()
{
	prime[1]=1;//1不是质数
	for(int i=2;i<=100000;i++)
	{
		if(prime[i]==0)//如果i是质数
		{
			for(int j=i*2;j<=100000;j+=i)//那么将i的倍数都打上标记
			{
				prime[j]=1;
			}
		}
	}
	
	
	int n;cin>>n;
	for(int i=1,a;i<=n;i++)
	{
		cin>>a;
		if(prime[a]==0) cout<<a<<" ";
	}
	return 0;
}

当然,在这道题里面,这种做法优势不大。

对于数字更大更多(例如\(n\le10^6,a_i\le10^8\)的范围),有兴趣可以了解一下线性筛例题点我

对于快速判断大质数,有兴趣可以去了解Miller–Rabin 素性测试。

参考文献

素数 - OI Wiki

标签:prime,int,题解,每日,sqrt,质数,20240322
From: https://www.cnblogs.com/Vanilla-chan/p/18089705

相关文章

  • Python函数每日一讲12 - len()
    引言在Python编程中,经常会遇到需要获取对象的长度或者元素个数的情况。而len()函数就是用来返回对象的长度或者元素个数的。通过本文的介绍,你将学习到len()函数的基本用法以及在实际应用中的一些技巧,帮助你更好地利用这一函数解决问题。语句概览len()函数用于返回对象的长度或......
  • SQL的nvarchar类型的中文内容,显示有乱码问题解决
    今天上线一个ASP项目升级为MVC的项目。原系统的ASP语言保存到SQLserver中nvarchar字段内容显示乱码了(显示有&#代码)。下图是SQLmanagementstudio的结果截图:左1列是经修正转化的可正常显示右1列OriStr为原数据库中nvarchar的内容。(ASP程序保存到数据库的原始数据)【产生乱......
  • 洛谷 P1379 八数码难题 A* 题解
    刚做完一道模板A*,看到这题我直接小脑萎缩了...阿米诺斯!这怎么用A*?!——刚开题的我beeeeeeeeeelike甚至比模板简单(这是绿的...)其实会是会但是纸张的是这玩意我不会搞估价函数我草!然后突然想到能不能把这个状态下有多少个数字不在目标位置作为估价函数?我喜欢\(IDA*\),有兴趣......
  • iOS应用审核问题解决方案及优化方法 ✨
     摘要本文将针对iOS应用提交审核时可能遇到的问题,如“你必须在Xcode中添加com.apple.developer.game-center密钥”,以及突然间提交送审报错情况进行探讨。通过大量查询资料和尝试,结合案例分析,提供了解决方案和优化方法,帮助开发者成功通过应用商店审核。 引言在iOS应用开发......
  • 每日面经分享03.22(垃圾回收、内存溢出)
    1.什么是垃圾回收机制a.垃圾回收是一种自动内存管理机制,用于在程序运行时自动释放不再使用的内存空间。b.作用减少内存泄漏和提高程序的性能。2.Python中垃圾回收机制方法a.gc模块:Python提供了gc(GarbageCollector)模块,用于控制和调整垃圾回收机制的行为。通过该模......
  • UVA557 Burger 题解
    UVA557Burger题目大意称一个长度为\(n\)的01串是好的,当且仅当\(0\)和\(1\)在该串中分别出现恰好\(\fracn2\)次,且该串的最后两位相同。现给定\(n\)(\(n\)为偶数),求该串是好的的概率。Solve正难则反,考虑求出最后两位不同的概率。令\(m=\fracn2\),那么条件“最后......
  • 一次性搞定!思源字体安装、使用及常见问题解答
    环境Windows11Pro23H2Microsoft365Word2402思源宋体:v2.002思源黑体:v2.0041.结论本人非专业字体工作者,个人建议,仅供参考;先说结论,链接以及详细说明见后文安装SC版本,无其余后缀HW,VF,CN等关于HW,思源宋体没有HW版本,个人实测,非HW版本,英文数字采用比例......
  • 每日导数91
    隐零点代换,短除因式分解,计算量偏大已知\(f(x)=\lnx-ax+a,g(x)=(x-1)e^{x-a}-ax+1\)(1)若\(f(x)\leq0\),求\(a\)(2)当\(a\in(0,1]\)时,证明:\(g(x)\geqf(x)\)解(1)\(\lnx-ax+a\leq0\)记\(F(x)=\lnx-ax+a,F^{\prime}(x)=\dfrac{1}{x}-a\)当\(a\leq0\)时,\(F(x)\......
  • AcWing 1230. K倍区间 C++满分题解
    原题链接https://www.acwing.com/problem/content/1232/题目分析求区间和,我们可以通过前缀和来求出。我们规定sum[i]表示第1个元素到第i个元素的和。那么sum[r]-sum[l-1]就是区间[l,r]的和。一维前缀和for(inti=1;i<=n;i++){scanf("%lld",&sum[i]);......
  • cfRound935div3--DEFG题解
    ps:这场因为精神状态不佳,又C题题意有点绕,卡题了,头晕找不到错.最后做了两题就溜了.狠狠扣90分..D-SeraphimtheOwl题意:即选一个位置,使得其满足题意。而且在满足题意的基础上,要靠近中心越好,如果满足题意而且靠近中心的距离一样,那么输出前面那个.intcnt0[300005]={0};......