鱼C论坛

 找回密码
 立即注册
查看: 8426|回复: 55

[已解决]能不能在 1 秒, 10兆内存,代码10kb以内100%判断long long范围的数是不是质数?

[复制链接]
发表于 2023-1-8 15:17:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2023-1-8 15:54 编辑

能的话给出代码

禁止打表!!!
最佳答案
2023-1-30 09:59:38
zhangjinxuan 发表于 2023-1-30 09:31
不过我们要的是 long long 范围,1e18, 这个肯定要存下 42亿 之内的质数啊

我觉得就只能依靠数学了


当成 int 了
感觉最快的准确方法还是有 O(sqrt(n)) 的复杂度,所以可能无解
当然,在考试中遇到这种题可以直接骗分
首先判断输入的数是否超过了某个最大值,如果超过了,一律返回不是素数
如果没有超过,就先预处理sqrt(最大值)以内的素数,再进行判断

附赠诗一首:
骗分过样例,暴力出奇迹。暴搜挂着机,打表出省一。N方过百万,暴力踩标算。肥修赛大象,只是代码短。
想要骗到分,一定有方法。图论背模板,数论背公式,动规背方程,高精背代码,要是都不会,干脆输样例。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-8 15:30:40 | 显示全部楼层

啊,啊,啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 15:34:34 | 显示全部楼层

long long
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:12:46 | 显示全部楼层
人造人 发表于 2023-1-8 17:10
我不打表,我查别人的表,^_^
因为要访问网络,用C++也不是很好整,这里用python了

我真的服了

如果这就是一道编程题,怎么办呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:14:51 | 显示全部楼层
人造人 发表于 2023-1-8 17:14
我想这题考的是你的数学知识,我数学不好,^_^

也许是的,我网上搜搜?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:15:36 | 显示全部楼层
KeyError 发表于 2023-1-8 16:55
这里是C/C++交流专区,请不要写Python。

随便吧,毕竟只要不用一些奇奇怪怪的模块,还是可以转换成C++的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:24:20 | 显示全部楼层
人造人 发表于 2023-1-8 17:14
我想这题考的是你的数学知识,我数学不好,^_^

网上的都不100%准确
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:29:08 | 显示全部楼层

估计以我的电脑,这道题根本无解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 17:34:22 | 显示全部楼层

嗯!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 21:34:26 | 显示全部楼层
tommyyu 发表于 2023-1-8 20:20
使用Python打表的话只需要262144个整数变量即可,但是这些数都会超级大

别打表啦

你说竞赛会不会出现先这种题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 21:37:52 | 显示全部楼层
tommyyu 发表于 2023-1-8 21:36
不会,顶多用个线性筛

线性筛也不行啊?
long long 怎么搞?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-8 21:41:59 | 显示全部楼层
高山 发表于 2023-1-8 20:15
我坚决不会不同意楼主的看法!

不会不……少来双重否定……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-9 16:32:47 | 显示全部楼层

感觉我问的问题都不是普及组的朋友能做出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-29 22:29:13 | 显示全部楼层
tommyyu 发表于 2023-1-29 18:27
我发现可以通过打表 sqrt(4294967295) 之内的质数来判定
但是这样不又成打表了么
所 ...

雀食,但是,42亿,怎么得也得要跑1分钟,我也想过
不过确实是最优解(我看网上都是一些很奇怪的数学知识,还不一定100%准确)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-29 22:46:19 | 显示全部楼层
tommyyu 发表于 2023-1-29 22:43
sqrt(42亿),只需要判断 1~65536 以内的质数就可以了

我感觉好懵逼

为什么感觉一直在sqrt(sqrt两遍了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 09:29:05 | 显示全部楼层
jhq999 发表于 2023-1-30 00:40
我的电脑最多大概6到8秒之间,再也想不出来了

这个是100%正确的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 09:31:28 | 显示全部楼层
tommyyu 发表于 2023-1-30 09:04
因为如果有一个数是42亿以内的合数,则它必定有一个 sqrt(42亿) 以内的质因数。
因此很容易想到两种方法 ...

不过我们要的是 long long 范围,1e18, 这个肯定要存下 42亿 之内的质数啊

我觉得就只能依靠数学了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 10:02:13 | 显示全部楼层
tommyyu 发表于 2023-1-30 09:59
当成 int 了
感觉最快的准确方法还是有 O(sqrt(n)) 的复杂度,所以可能无解
当 ...

要么数学,要么打表


不过还得看情况,多测题的话先预处理处理划算
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 11:09:31 | 显示全部楼层
jhq999 发表于 2023-1-30 11:04
暴力枚举变形,
质数除了2都是奇数,一个奇数尾数只能是1、3、5、7、9
而尾数是5的奇数一定会被5整除 ...


num = 255
也需许要加一个特判
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 11:20:10 | 显示全部楼层
jhq999 发表于 2023-1-30 11:10
尾数是5,直接判断出来num不是质数
只有出现尾数是1、3、7、9才需要枚举判断是不是质数

这样啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-30 04:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表