首页 > 其他分享 >一个绝妙的整除判定优化

一个绝妙的整除判定优化

时间:2025-01-22 22:09:51浏览次数:1  
标签:int 绝妙 pfac 判定 整除 vectorres

#include<bits/stdc++.h>
using namespace std;
const int maxn=1<<16;

using u32=uint32_t;using u64=uint64_t;
bool np[maxn];
u32 p[maxn];int pc;
u64 isd_p[maxn];

void eul(){
	for(int i=2;i<maxn;++i){
		if(!np[i])p[++pc]=i,isd_p[pc]=-1ull/i+1;
		for(int j=1;j<=pc&&p[j]*i<maxn;++j){
			np[p[j]*i]=1;if((u32)i*isd_p[j]<isd_p[j])break;
		}
	}
}

vector<u32> pfac(u64 x){
	vector<u32>res;
	for(int i=1;i<=pc&&(u64)p[i]*p[i]<=x;i+=8){
		#define do_with(i)\
		if(isd_p[i]*x<isd_p[i]){\
			res.push_back(p[i]);\
			do x/=p[i];while(x%p[i]==0);\
		}
		do_with(i)do_with(i+1)do_with(i+2)do_with(i+3);
		do_with(i+4)do_with(i+5)do_with(i+6)do_with(i+7);
	}
	if(x!=1)res.push_back(x);
	return res;
}
vector<u32> pfac_ntv(u32 x){
	vector<u32>res;
	for(int i=1;i<=pc&&(u64)p[i]*p[i]<=x;++i){
		if(x%p[i]==0){
			res.push_back(p[i]);while(x%p[i]==0)x/=p[i];
		}
	}
	if(x!=1)res.push_back(x);
	return res;
}
signed main() {
	ios::sync_with_stdio(0),cin.tie(0);
	eul();
	u32 hava=0;
	mt19937 rng(0);
	for(int i=0;i<(int)1e6;++i){
		u32 x=p[(u64)i*i%pc+1]*p[(u64)i*(u64)i*(u64)i%pc+1];
		// u32 x=rng();
		auto z=pfac(x);hava^=z.size();
		// assert(z==pfac_ntv(x));
	}
	cerr<<hava<<clock()*1./CLOCKS_PER_SEC;
	cerr<<endl;
}
/*
g++ te.cpp -o te -g -std=c++14 -Wall -Wshadow -fsanitize=undefined,address && ./te < in.in

*/

标签:int,绝妙,pfac,判定,整除,vectorres
From: https://www.cnblogs.com/pp-orange/p/18686859

相关文章

  • 整除与同余
    整除得到了扩展,于是便成了同余。整除定义及性质若整数\(b\)除以非零整数\(a\),商为整数,且余数为零,\(b\)为被除数,\(a\)为除数,即\(a|b\)(“|”是整除符号),读作“\(a\)整除\(b\)”或“\(b\)能被\(a\)整除”。\(a\)叫做\(b\)的约数(或因数),\(b\)叫做\(a\)的倍数。整除属于除尽的一种特......
  • 论文查重率多少会被判定为抄袭?
    论文查重是指通过计算机技术对论文进行检测,以发现其中的重复文本或者抄袭行为。以保证学术界的学识真实性和独立性。究竟重复率达到多少会被判定为抄袭呢? 根据学术界普遍认可的标准,论文的重复率应控制在5%至15%之间,超过这个范围就需要进一步检查是否存在抄袭现象。具体来说,重......
  • 1.2.4 主干道的处理方式,判定载流通道的布线宽度
    主干道的处理方式,判定载流通道的布线宽度在PCB(印刷电路板)的设计中,主干道主要指的是电源和地线的主要供电通道,通常需要处理妥当,以确保电路的稳定性和可靠性。处理主干道时有几个重要的方面,包括选择适当的布线宽度以承载所需电流。以下是关于主干道的处理方式和判定载流通道的布......
  • 【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
    目录......
  • 使用`typeof test === "object"`来判定test是否是对象有什么缺陷?如何避免?
    在JavaScript中,使用typeoftest==="object"来判断一个变量test是否为对象有一定的缺陷。这种方法的缺陷主要包括:无法区分null和对象:在JavaScript中,typeofnull的结果也是"object",这会导致当test为null时,上述判断也会返回true,这显然是不准确的。无法识别数组和null之外的其......
  • 白盒测试——6种覆盖(语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,组合覆盖,路径覆盖)
    目录白盒测试1.语句覆盖:每个语句执行一次2.判定覆盖:每个判定真假至少一次3.条件覆盖:每个判定中的条件至少一次4.判定条件覆盖=2+35.组合(条件组合覆盖):每个判定中的各个条件各种可能的组合至少一次6.路径覆盖:所有路径至少执行一次此文章为我看了B站视频和CSDN文章......
  • 2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word
    2024-12-14:K周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串word和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行最少的操作次数......
  • 质数-质数筛选、质因数分解、互质判定
    质数筛选对于一个正整数N,一次性求出 1~N 之间所有的质数,即为质数筛选。显然根据上述「质数判定」的内容,我们可以通过枚举 1~N 的所有数,再依次使用「试除法」来判定其是否为质数,从而完成质数的筛选。但此种方法的时间复杂度过高,为 O(N√N) 。质数筛选经典方法:「Eratosthene......
  • 【C++算法】33.位运算_判定字符是否唯一
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:面试题01.01.判定字符是否唯一题目描述:解法如果使用数据结构的话哈希表:一个一个字符扫描,不在哈希表里面的就放进去,在里面的就返回false。扫描完全部不重复就返回true。也可以优化一下,字母一共26......
  • 890. 能被整除的数
    //890.能被整除的数.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*https://www.acwing.com/problem/content/892/给定一个整数n和m个不同的质数p1,p2,…,pm。请你求出1∼n中能被p1,p2,…,pm中的至少一个数整除的整数有多少个。输入格式第......