首页 > 其他分享 >编译期生成随机质数

编译期生成随机质数

时间:2023-04-26 14:56:36浏览次数:41  
标签:__ return 质数 编译 随机 using ll

Q1: 为什么要随机质数

A1: 因为不随机可能会被 hack

Q2: 为什么要编译期生成

A2: 编译期生成的话,编译器可以上取模常数优化

Q3: 你咋搞的

A3: __TIME__ __TIMESTAMP__ 这两个宏。

具体来说,每次编译后,生成的质数相同。重新编译后,生成的质数不同。

#include<bits/stdc++.h>
using std::cin;
using std::cout;
using ll = long long;
using u64 = unsigned long long;
using u128 = __uint128_t;

constexpr ll pow(ll a, ll x, ll p, ll res = 1) {
	for(;x;x >>= 1, a = (u128) a * a % p)
		if(x & 1) res = (u128) res * a % p;
	return res;
}
constexpr bool checkprime(ll p) {
	if(p == 1) return 0;
	ll d = __builtin_ctzll(p - 1), s = (p - 1) >> d;
	for(ll a : {2, 3, 5, 7, 11, 13, 82, 373}) {
		if(a % p == 0)
			continue;
		ll x = pow(a, s, p), y = 0;
		for(int i = 0;i < d;++i, x = y) {
			y = (u128) x * x % p;
			if(y == 1 && x != 1 && x != p - 1) return 0;
		}
		if(x != 1) return 0;
	}
	return 1;
}
constexpr ll gen_prime(ll L, ll R) {
	// gen prime in [L, R)
	u64 x = 1128471;
	for(char c : __TIME__  __TIMESTAMP__) {
		x += c, x ^= x << 13, x ^= x >> 7, x ^= x << 17;
	}
	for(;;) {
		x ^= x << 13, x ^= x >> 7, x ^= x << 17;
		ll y = L + x % (R - L);
		if(checkprime(y))
			return y;
	}
	return 0;
}
constexpr ll mod = gen_prime(1e17, 1e18);
int main() {
	cout << mod << '\n';
}

标签:__,return,质数,编译,随机,using,ll
From: https://www.cnblogs.com/skip2004/p/17356062.html

相关文章

  • Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库
    前言  mysql驱动版本msvc2015x32版本调好,mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享......
  • python 编译成.pyd/.so
    所谓pyd文件,就是D语言(C/C++综合进化版本)编写的一种dll文件,相比起容易被反编译的pyc文件,pyd文件目前还没有办法进行反编译,只能被反汇编,因此有很高的安全性,并且运行效率也比较高。在windows会编译出pyd,linux会编译称.so编译前准备要想编译pyd,首先要通过pip安装Cython和setup......
  • 若依vue框架添加kotlin依赖,实现kotlin和java混合编译
    第一步:在最外部pom.xml文件添加版本号和依赖管理properties添加版本号<kotlin.version>1.4.21</kotlin.version><!--启用kotlin增量编译--><kotlin.compiler.incremental>true</kotlin.compiler.incremental>dependencyManagement添加依赖管理<!-......
  • Erdős–Rényi 随机图的连通性
    对于给定的\(n\)个顶点,对于任意一个点对,以\(p\)的概率连边,这样得到的一个无向简单图上的概率分布,称为Erdős–Rényi随机图模型.那么,\(p\)有多大的时候,得到的图将会有很大概率连通呢?Erdős和Rényi给出了如下结果:对于\(p=(\logn+c)/n\),记事......
  • 分布式编译系统的搭建
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:dan文章来源:GreatSQL社区原创由于MySQL源码编译单机耗费的时间过于长,最近MySQL变成8.0.27以后编译时间明显更耗时了,并且办公室内有多余的空闲......
  • clion使用 wsl 编译下, 文件名和目录名冲突问题
    问题描述:在工作目录下有一文件夹(nameA)与文件(nameA)重名:/usr/bin/ld:cannotopenoutputfile**:Isadirectorycollect2:error:ldreturned1exitstatus问题在于链接器(ld)试图将二进制文件输出到一个名为"binaryTree"的目录中 解决方案:更改输出文件名或输出路径,避免......
  • 【编译原理小记】:正规式到NFA,NFA化简为DFA
    做编译原理作业是遇到的一类比较繁琐的题,记录一下。......
  • 质数及其筛法
    筛法质数质数,又称素数。如果一个数\(a\in\N^+(a\neq1)\)的因子有且仅有\(1\)和它本身,则称数\(a\)为质数。普通筛法过程枚举\([2,n-1]\),如果\(n\)在这个范围内有因子,则\(n\)不是因数。因为\(n\)的因子成对出现,所以我们可以枚举\([2,\sqrt{n}]\)。Codeboolisprime(in......
  • 类似idea编译器集成gitee和github
      详细博客:(24条消息)IDEA集成github和Gitee_尘开的笔记的博客-CSDN博客......
  • 如何建设一个用于编译 iOS App 的 macOS 云服务器集群?
    作者:京东零售叶萌现代软件开发一般会借助CI/CD来提升代码质量、加快发版速度、自动化重复的事情,iOSApp只能在mac机器上编译,CI/CD工具因此需要有一个macOS云服务器集群来执行iOSApp的编译。今天就来谈谈如何建设macOS云服务器集群购买macmini/MacStudio机......