鱼C论坛

 找回密码
 立即注册
查看: 4258|回复: 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方过百万,暴力踩标算。肥修赛大象,只是代码短。
想要骗到分,一定有方法。图论背模板,数论背公式,动规背方程,高精背代码,要是都不会,干脆输样例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-8 15:27:40 | 显示全部楼层
正在写
  1. def is_prime(x):
  2.     if x != 0 and x != 1:
  3.         for i in range(2, int(x**0.5)+1):
  4.             if not x%i:
  5.                 return f'{x}不是质数!'
  6.     return f'{x}是质数!'

  7. f = open('prime.cpp', mode='w')
  8. f.write('''#include <iostream>
  9. using namespace std;
  10. int main() {''')
  11. 53
  12. f.write('''
  13.     int n;
  14.     cin >> n;
  15.     switch(n) {
  16. ''')
  17. for i in range(2147483648):
  18.     f.write(f'        case {i}:\n')
  19.     f.write(f'            cout << "' + is_prime(i) + '";\n')
  20.     f.write(f'            break;\n')
  21.     if not i % 100000: print(i)
  22. f.write('''\
  23.     }
  24.     return 0;
  25. }''')
  26. f.close()
复制代码

点评

不,我坚决不会不同意楼主的看法!:5  发表于 2023-1-8 20:14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

啊,啊,啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

long long
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

为什么代码要在10k以内啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 15:39:47 | 显示全部楼层
zhangjinxuan 发表于 2023-1-8 15:38
每一次的输出至少50字节,输出2147483648是多少字节?

这是多少兆?

我现在的代码应该已经有几千万行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 15:50:52 | 显示全部楼层
10k=10000啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 15:53:34 | 显示全部楼层
有一种更好的打表方法,大概只需要67108864个long long变量就可以打表long long范围的正整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 16:49:15 | 显示全部楼层
给你们一个样例
9223372036854775783
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 16:55:28 | 显示全部楼层


这里是C/C++交流专区,请不要写Python。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

楼主说不让写了?

点评

。。。。。。  发表于 2023-1-11 17:18
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 17:07:37 | 显示全部楼层
额,可以,但是很难,首先如果使用库的话,本身就要加入许多的内存,27kb(<_<)就是一个输出程序就要,2.14 MB,你要自己用汇编写输出输入程序的话可以(<_<)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. sh-5.1$ ls
  2. main.py
  3. sh-5.1$ cat main.py
  4. #!/usr/bin/env python
  5. #coding=utf-8

  6. import requests, re
  7. import time

  8. def prime(n: int) -> bool:
  9.     url = r'https://zh.numberempire.com/primenumbers.php'
  10.     data = {'number': f'{n}'}
  11.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.56 Safari/537.36'}
  12.     response = requests.post(url, headers = headers, data = data)
  13.     pattern = rf'数字.*?{n}.*?不是质数'
  14.     if re.search(pattern, response.text): return False
  15.     pattern = rf'数字.*?{n}.*?是质数'
  16.     if re.search(pattern, response.text): return True
  17.     raise "未查询到结果"

  18. time.sleep(0.5)
  19. print(12, prime(12))
  20. time.sleep(0.5)
  21. print(13, prime(13))

  22. time.sleep(0.5)
  23. print(0xffffffffffffffff, prime(0xffffffffffffffff))
  24. time.sleep(0.5)
  25. print(0x1ffffffffffffff0, prime(0x1ffffffffffffff0))
  26. sh-5.1$ ./main.py
  27. 12 False
  28. 13 True
  29. 18446744073709551615 False
  30. 2305843009213693936 False
  31. sh-5.1$
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我真的服了

如果这就是一道编程题,怎么办呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 17:14:16 | 显示全部楼层
zhangjinxuan 发表于 2023-1-8 17:12
我真的服了

如果这就是一道编程题,怎么办呢?

我想这题考的是你的数学知识,我数学不好,^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也许是的,我网上搜搜?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

随便吧,毕竟只要不用一些奇奇怪怪的模块,还是可以转换成C++的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

网上的都不100%准确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-8 17:25:23 | 显示全部楼层
zhangjinxuan 发表于 2023-1-8 17:24
网上的都不100%准确

这我就没办法了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

估计以我的电脑,这道题根本无解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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