[BZOJ2082][Poi2010][质因数分解][乱搞]Divine divisor

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载
题意

找到最大k,使得若m为n的因数,则m^k也为n的因数,并求出有多少个m满足条件


BZOJ300题留念(果然还是不够)

在status里随手点开的题,因为要求最大的k,那么对于满足条件的n,不可能存在平方因子。
比如n有一个因数是p^2,因为n^k|m,即p^2k|m,则2k为更优的解。

那么只要把这个数质因数分解,答案一就是最大的次数。
令x为次数最大的质数的数量,2^x-1就是答案二。

刚开始暴力上rho…结果没有想到要打高精度,搜了发题解,听说貌似rho会被卡…..

简单讲一下网上的做法
把10^6以下的质数筛出来,把这些数中10^6以下的质因数都除去,那么剩下的数有三种情况,1.是素数 2.是两个不同素数的乘积 3.是素数的平方

1 3可以判定出来,对于2,因为只需要知道次数,不需要知道具体因数,两两数取gcd,就可以分解出来

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <ctime>
#include <map>

using namespace std;

typedef long long ll;

int n;
int vis[610];
ll Ans1,Ans2;
ll p[1000010],A[610];
map<ll,ll> app;

ll mul(ll x,ll y,ll mod){
  if(x<y) swap(x,y);
  ll r=0;  
  while(y){  
    if(y&1) if((r+=x)>=mod) r-=mod;
    if((x+=x)>=mod)x-=mod;
    y>>=1;
  }
  return r;
}

ll pow(ll x,ll y,ll mod){  
  ll r=1;
  while(y){  
    if(y&1) r=mul(r,x,mod);  
    x=mul(x,x,mod);  
    y>>=1;  
  }  
  return r;
}  

bool check(ll x,ll y,ll mod){  
  ll k=rand()%(mod-2)+2;  
  k=pow(k,x,mod);  
  if(k==1||k==mod-1) return 1;  
  for(ll i=1;i<=y;i++)
    if((k=mul(k,k,mod))==mod-1) return 1;
  return 0;  
}

bool judge(ll x){
  if(x<2) return 0;  
  if(!(x&1)) return x==2;  
  ll a=x-1,b=0;  
  while(!(a&1)) a>>=1,b++;  
  for(int c=1;c<=10;c++)
    if(!check(a,b,x))return 0;  
  return 1;  
}

struct Int{
  int a[1010],sz;
  int &operator [](int x){return a[x];}
  Int(){sz=0;memset(a,0,sizeof(a));}
  Int(ll x){sz=0;while(x)a[++sz]=x%10,x/=10;}
  friend Int operator *(Int a,Int b){
    Int c;c.sz=a.sz+b.sz-1;
    for(int i=1;i<=a.sz;i++)
      for(int j=1;j<=b.sz;j++)
    c[i+j-1]+=a[i]*b[j];
    for(int i=1;i<=c.sz;i++)
      if(c[i]>=10){
    c[i+1]+=c[i]/10; c[i]%=10;
    if(i==c.sz) c.sz++;
      }
    return c;
  }
  friend Int operator +(Int a,Int b){
    Int c;c.sz=max(a.sz,b.sz);
    for(int i=1;i<=c.sz;i++) c[i]=a[i]+b[i];
    for(int i=1;i<=c.sz;i++)
      if(c[i]>=10){
    c[i+1]+=c[i]/10; c[i]%=10;
    if(i==c.sz) c.sz++;
      }
    return c;
  }
  friend Int operator -(Int a,int b){
    a[1]-=b;
    for(int i=1;i<=a.sz;i++)
      if(a[i]<0){
    a[i+1]--; a[i]+=10;
    if(i==a.sz-1) a.sz--;
      }
    return a;
  }
  inline void print(){
    for(int i=sz;i;i--) putchar(a[i]+48);
    putchar('\n');
  }
};

inline Int _pow(ll y){
  Int r=1,x=2;
  while(y){
    if(y&1) r=r*x;
    x=x*x;
    y>>=1;
  }
  return r;
}

inline char nc(){
  return getchar();
  static char buf[100000],*p1=buf,*p2=buf;
  if(p1==p2){p2=(p1=buf)+fread(buf,1,100000,stdin); if(p1==p2)return EOF;}
  return *p1++;
}

inline void reaD(int &x){
  char c=nc();x=0;
  for(;c>57||c<48;c=nc());for(;c>=48&&c<=57;x=x*10+c-48,c=nc());
}

inline void reaD(ll &x){
  char c=nc();x=0;
  for(;c>57||c<48;c=nc());for(;c>=48&&c<=57;x=x*10+c-48,c=nc());
}

inline void pre(){
  for(int i=2;i<=1000000;i++){
    if(!p[i]) p[++p[0]]=i;
    for(int j=1;j<=p[0]&&1ll*p[j]*i<=1000000;j++)
      if(p[p[j]*i]=1,i%p[j]==0) break;
  }
}

ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}

inline void add(ll x,int y){
  if(x==1) return;
  ll k=(app[x]+=y);
  if(k>Ans1) Ans1=k,Ans2=1;
  else if(k==Ans1) Ans2++;
}

int main(){
  pre();
  reaD(n); ll x;
  for(int i=1;i<=n;i++){
    reaD(A[i]);
    for(int j=1;j<=p[0];j++)
      if(A[i]%p[j]==0){
    while(A[i]%p[j]==0){
      A[i]/=p[j];
      add(p[j],1);
    }
      }
    if(A[i]>1){
      ll k=(int)sqrt(A[i]);
      if(k*k==A[i]){
    add(k,2);
    vis[i]=1;
      }
      else{
    if(judge(A[i])){
      add(A[i],1);
      vis[i]=1;
    }
      }
    }
    else vis[i]=1;
  }
  for(int i=1;i<=n;i++)
    if(A[i]>1)
      for(int j=i+1;j<=n;j++)
    if(A[j]>1&&A[i]!=A[j]){
      ll k=gcd(A[i],A[j]);
      if(k==1) continue;
      if(!vis[i]) add(k,1),add(A[i]/k,1),vis[i]=1;
      if(!vis[j]) add(k,1),add(A[j]/k,1),vis[j]=1;
    }
  for(int i=1;i<=n;i++)
    if(!vis[i]) add(A[i]<<1,1),add(A[i]<<1|1,1);
  printf("%lld\n",Ans1);
  (_pow(Ans2)-1).print();
  return 0;
}
2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

不用写代码!3个免费在线工具教你完成Lasso回归分析(含生存资料处理)

本文介绍3款免费在线工具,帮助用户无需编程即可完成临床数据的Lasso回归分析,特别适合处理生存资料。通过详细的操作指南和实战技巧,读者可以轻松掌握变量筛选、模型优化及结果解读,提升临床研究的效率和准确性。

weixin_33738555的博客 348

bzoj-2082 Divine divisor

题意: 给出一个数N,求它最大的因子次数,以及有多少个这样的因子; 这个数很大,由不超过600个小于等于10^18的数给出; 题解: 首先对这个数进行质因数分解之后,最大的质因子次数就是第一问的答案; 第二问的答案就是最大质因子次数的质因子种类数的二的幂次-1; 这两步都是显然的,然而都是很坑的地方。。 第二问的幂次要用一个高精度加法,这个注意到就没什么了; 第一问的质因数

140142 1288

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

重点在supplier part是立创商城的编号,可以搜到。

2301_80397661的博客 3260

BZOJ2082: [Poi2010]Divine divisor 数论

Description Tz耍畸形,在寂寞的时候玩一个游戏,他随便找出一个n,然后算出n的所有因子,最后找出一个最大的k,即有一个因子d的k次方为n的因子,那个因子d就是非凡因子啦 。比如48他的非凡因子d就是2,k最大为4,因为16也是48的因子。一个整数的非凡因子可能不止一个,比如6就有3个:2,3,6(k最大是1)。 Input 有两行,第一行给出一个整数m(1<=m<=600),第二行

リーインカーネイション 598

OpenWrt路由开启DDNS+端口转发进行外网访问

OpenWrt路由开启DDNS+端口转发进行外网访问(LuCI界面实现)--开篇一、准备工作二、开机!三、连接--结尾 –开篇 本篇适用于一切装有OpenWrt系统的路由器/软路由,只要你保证有WAN接口和一个光猫,甚至你不需要有LAN接口(当然前提是你能连接路由器的WIFI进后台,不然你只能通过LAN进后台咯)。所有的配置过程都是基于LuCI界面来的,当然大神们一般都通过SSH登陆路由使用命令配置,但我也不会啊,只能给个有GUI界面的教程了。 一、准备工作 一个装有OpenWrt系统的路由器/软路由并

秋之颂的博客 9万+

骗分导论 CSP、NOIP、蓝桥杯、PAT、USACO等竞赛的算法骗分技巧 轻松省三

问题来了,那么多座桥,炸一座就破坏岛屿的联系,可能性微乎其微(除非特别设计数据)。它们的价值极大,不仅能初步帮你检验程序的对错,而且,如果你不会做这道题,你就可以直接输出样例!在OI考试中最后难的题数据最后的几个,他们往往不会创造新的数据,此时就可以直接输出最后几个数据了。需要运用《骗分导论》第3章中学到的知识,先写出朴素算法,然后造一些数据,可能就会发现规律。有些时候,问题的答案可能很有特点:对于大多数情况,答案是一样的。据说,在NOIP2013中,有人最后一题不会,愤然打了个随机数,结果得了。

星卯教育-信奥教练tony 6403

BZOJ2082: [Poi2010]Divine divisor

题目大意:给出一个用m个ai乘起来表示的n,求出一个最大的k,使得存在一个d,使得d^k|n,并求出在这种情况下符合条件的d的个数 我们想求得答案,很自然的想要进行质因数分解,想要把n进行质因数分解,显然要把ai进行质因数分解 但是由于ai有点大,直接根号ai全部分解显然是不现实的 那么我们不妨考虑先筛出10^6以内的所有素数,然后用这些素数来筛ai 这样筛完之后,对于所有的ai,

commonc的博客 712

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题

qq_45176349的博客 4963

[Codeforces799F] [哈希] Beautiful fountains rows

%%%Manchery给每个区间随机一个权值,这样每个位置被哪些区间覆盖奇数次就可以用区间权值的xor值表示,假设为x,一个区间被哪些区间覆盖也可以用xor值表示,假设为y 那么满足x=y的区间就是符合条件的区间前缀和搞一搞,map记一记就好啦#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #

CE玩家 1493

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时,如何解决?控制面板-系统和安全-Windows Defender防火墙-自定义设置,将专用网络及公用网络关闭。点击后,选择“病毒和威胁防护”-管理配置。进入安全中心后,选择“病毒和威胁防护”将需要排斥的选项输入后,保存配置即可。2:打开windows安全中心。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 6万+

YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

know_F0727的博客 189

[Codeforces773E] [线段树] [找规律] Blog Post Rating

题意大概是 有一个博客,初始赞数为0,每个人会浏览这篇博客,如果这个人期望的赞数大于这边博客的赞数,他就会赞这篇博客,如果小于这篇博客,就踩一下(博客赞数-1),相同就不操作。询问对于每个i,1~i的人按照一个顺序浏览,求一种顺序使得博客最后的赞数最大,输出这个最大的赞数。先瞎猜一下,这1~i个人肯定是按照期望的赞数升序访问最优。 然后写个暴力交一下,发现T了,说明这个结论是对的那么只要维护一

CE玩家 1367

PCB层叠结构与阻抗计算

1.Core 和 PP PCB两个重要组成部分:Core 和 Prepreg(半固态片,简称PP)。 如下图所示, Core 的两个表面都铺有铜箔,可作为信号层、电源层、地层等导电层,Core的上下表面之间填充的是固态材料; PP的表面不铺铜,在PCB中起填充作用,其材质是半固体的树脂材料,因此比Core略软一些。 在制作多层板时,需配合使用Core和PP,一般在两个Core 之间应选PP作为填...

sinat_15677011的博客 1万+

[暴力DP][暴力STL]SNOI2017 && LOJ#2256. 英雄联盟

列出DP方程 fi,j=min{fi−1,jk+k×Ci,k|j且k≤Ki }f_{i,j}=min\{ f_{i-1,{j\over k}}+k\times C_i,k|j且k\leq K_i~\} fi,jf_{i,j}表示前ii个物品产生jj中方案时的最小价格jj很大,有101810^{18},但是jj只有2,3,5,7三种质数,所以jj能取到的值上限为(logm)4(\log m)^4,

CE玩家 1366

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[BZOJ2628][压位][Shift-And&Shift-Or]JZPSTR

%%%Hillan学了发Shift-And算法 再手打个Bitset就可以了 #include <cstdio> #include <iostream> #include <string> #include <cstring> #include <algorithm> #define N 2000010using namespace st

CE玩家 1230

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[BZOJ4790][构造] CERC 2016 D. Dancing Disks

CERC2016 D题题意有个6*6的棋盘,刚开始在(1,1)这个点有n个棋子叠起来(棋子大小无序),你可以从顶部移动任意多个棋子到相邻的位置,但是只能向下或者向右移动,要求你构造一种移动方法使所以棋子移动到(6,6)并且棋子大小从底向上降序Sample input 6 1 6 5 4 3 2 output 1 1 D 6 2 1 D 6 4 1 D 6 5 1 D 6 6 1 R

CE玩家 1071

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[AtCoder ARC077 .F] [字符串] [乱搞] SS

翻译下题解…可以发现一次变化是f(SS)=STSTf(SS)=STST,其中TT是S的一个前缀,|T||T|是S的最小周期 那么我们就只需要考虑变化g(S)=STg(S)=ST,因为不断变化1010010^{100}次的话,后面的部分就可以省去设TT的长度为dd,SS的长度是nn 可以证明如果d|nd|n,那么g(ST)=STTg(ST)=STT 否则,g(ST)=STSg(ST)=STS那么

CE玩家 1061

[前缀和 乱搞]BZOJ4972 .小Q的方格纸

发现询问是个等腰直角三角形,那么我们对于每条斜线作为斜边的等腰直角三角形,斜线上处理一下前缀和就可以了#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <ctime> #define fi first #define se secondusing namespace std;co

CE玩家 1056

[AtCoder ARC077 .E] [扫描线] [乱搞]guruguru

一次从a到b的变化可以看成一个(a,b)(a#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <vector> #define fi first #define se secondusing namespace std;const int N=200010;typedef long

CE玩家 992

[LOJ#6159][美团 CodeM 初赛 Round A][暴力即正解]最长树链

枚举每一个质数,权值是这个质数的倍数的节点设为1,否则为0,那么最长长链的长度就是点权为1的点构成的最长的链。当然不用枚举所以质数,因为每个数最多有log个不同的质因数,所以只要把所有点权质因数分解,枚举出现的质数就可以了。枚举质数后dfs,复杂度是nlogn的,因为每个点有log个不同的质因数,也就是说最多枚举到log个质数要dfs这个节点,所以复杂度是对的#include <cstdio> #i

CE玩家 983

[BZOJ3528][Zjoi2014][数学]星系调查

上一发大神的推导 后面代入求根公式就行。 因为数据只有M=N或M=N-1两种情况,所以这张图要不是一棵树要不只有一个环,是一棵树的情况很好考虑,有一个环的话要分类讨论。感觉ZJOI2014DAY1的题代码都好长,然而杜教AK了…….感觉这张图上一坨水印看着不爽,不知道怎么去……#include <cstdio> #include <cmath> #include <string> #incl

CE玩家 978

[BZOJ3837][Pa2013][随机][乱搞]Filary

然而我太懒了……没有打哈希。 直觉告诉我第二个答案是选择的k个数的差的gcd,那么对于每一个质因数,记录一下序列中能被这个质数整除的数的gcd,然后就可以了#include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #define N 100010 #define M 10000010using nam

CE玩家 976

[分块][数学][瞎搞]Codeforces Round #424 .C Bamboo Partition

刚开始的做法是对的…然而越做头越昏,竟然用错误的例子把自己叉掉… 还好最后半个小时清醒了先列出式子要求最大的d满足 ∑i=1nd−((ai−1)%d+1)≤k\sum_{i=1}^n d-((a_i-1)\%d +1)\leq k 其中ai要先减一再取模是为了防止ai是d的倍数的情况,再推一推n×d−∑i=1nai−⌊ai−1d⌋×d≤kn\times d-\sum_{i=1}^n a_i-\

CE玩家 922

[计数 补集转换][阈值] Codechef SEAARC.Sereja and Arcs

传送门 %%%度神 很强的计数题 题目就是求形如ABAB的个数,发现这个很难求,补集转换一下,答案就是总数减去AABB和ABBA的个数 求总数很简单,就是∏i=1n(ai2)\prod_{i=1}^n{a_i\choose 2}aia_i是第i中颜色个数 AABB的个数可以枚举p,然后用颜色的前后缀和求出来。 重点就是求ABBA了 直接求还是不好求,可以设一个阈值 SS BigBig

CE玩家 840

[二分 ST表 杂题] Codeforces875D. High Cry

早知道先看D题就不会掉这么惨了枚举左端点,那么区间或值最多变化log次二分变化的区间,再二分区间或值大于区间最大值的区间用ST表记一下区间最大值、或值#include <cstdio> #include <algorithm> #include <iostream>using namespace std;typedef long long ll;const int N=200010;int n,a

CE玩家 752

[BZOJ3388][Usaco2004 Dec]Cow Ski Area雪场缆车

题意给一张W∗LW*L的地图,每个格子有一个高度,规定只能在相邻的格子上滑雪,并且只能从高处往低处滑,可以在任意两个格子间连一条双向边,求最少连几条边,使任意两个格子可以互相到达。不多说了。直接上车 gjghfd大神题解 #include <cstdio>int A[505][505],n,m,a,b,Ans1,Ans2,v[505][505],t; int w[4][2]={{1,0},{-1

CE玩家 746
上一篇: [51nod1228][伯努利数][自然数k次幂和]序列求和
下一篇: [BZOJ3053][KD树]The Closest M Points
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值