这道题竟然暴力能拿到90分,大佬orzorzorz%%%%%%%%%%%

--------------------------分割线(下面是正解)---------------------------------

首先还是暴力,枚举选哪些数;

然后是正解:对于N,可以将它质因数分解为(a1^p1)*(a2^p2)*……*(ai^pi)的形式,因为要两两互质,那么令U={a1^p1,a2^p2,……,ai^pi},那么选出来的数一定是U的子集,且所有数取交为空集,取并为U,可以证明,i不会超过15,所以考虑状压DP来存储子集,转移也很简单。

贴代码:

#include<cstdio>
#include<utility>
#include<algorithm>
using namespace std;
const int N=100005;pair<int,int>B[N];
long long mul,pow=1,F[1<<20],n;
int mk[N],pri[N],ok[N],v[N],A[505],bit,cnt,num,m,k,tmp;void prime_shaker()
{for(int i=2;i<N;i++){if(!mk[i]) pri[++cnt]=i;for(int j=1;j<=cnt&&1ll*i*pri[j]<N;j++){ mk[i*pri[j]]=pri[j]; if(i%pri[j]==0) break; }}
}void divide(int x)
{tmp=0;for(int i=1;1ll*pri[i]*pri[i]<=x && i<=cnt;i++)if(x%pri[i]==0){B[++tmp]=make_pair(0,0);B[tmp].first=pri[i];while(x%pri[i]==0)B[tmp].second++,x/=pri[i];if(!ok[pri[i]])ok[pri[i]]=1,v[++num]=pri[i];}if(x>1) B[++tmp]=make_pair(x,1),v[++num]=x; return;
}bool check(int x)
{if(n%x) return 0; divide(x);for(int i=1;i<=tmp;i++){mul=1;for(int j=1;j<=B[i].second;j++)mul=mul*B[i].first;if((n/mul)%B[i].first==0)return 0;} return 1;
}int cal(int x)
{int Ret=0;for(int i=0;i<bit;i++)if(x%v[i]==0) Ret|=1<<i;return Ret;
}void check_zero()
{long long tt=n;for(int i=0;i<bit;i++)while(tt%v[i]==0) tt/=v[i];if(tt>1) { puts("0"); exit(0); }return;
}int main()
{prime_shaker();scanf("%lld%d",&n,&k);for(int x,i=1;i<=k;i++){scanf("%d",&x);if(x==1){ pow=2; continue; }if(check(x)) A[++m]=x;}sort(v+1,v+num+1);for(int i=1;i<=num;i++)if(v[i]!=v[i+1]) v[bit++]=v[i];check_zero();for(int i=1;i<=m;i++)A[i]=cal(A[i]);F[0]=1;for(int i=0;i<(1<<bit);i++)for(int j=1;j<=m;j++)if((i&A[j])==0&&i<A[j])F[i|A[j]]+=F[i];printf("%lld\n",F[(1<<bit)-1]*pow);return 0;
}

转载于:https://www.cnblogs.com/Ishtar/p/10010853.html

NOIP模拟 整数划分(数论,质因数分解,状压DP)相关推荐

  1. 【gmoj4743】【8.11模拟赛T1】积木【状压DP/暴搜】

    题目链接:积木 分析 这题数据也太水了吧我喜欢 可以直接暴力搜索每一个积木的每一个顺序的每一种放置方法. 阶乘级别的复杂度,居然能过就离谱. 正解是状压DP.f[i][j][k]f[i][j][k]f ...

  2. NOIP模拟 洛阳怀(质因数分解)

    传送门 [题目分析] 用正确的做法竟然只有45pts.....好吧完全没想到1e9怎么弄qwq 显然,我们对所有的a[i]进行质因数分解,得到,根据定义式,如果pi为"好质数",那 ...

  3. 省选模拟 幻化成风(容斥原理,状压DP)

    首先这个aia_iai​相同的时候无序的要求,直接按有序求答案,然后除aia_iai​相同的个数的阶乘即可,因为我们的bbb两两不同. 有序的答案要两两不同,我们考虑容斥哪些相同,可以想到的较高效容斥 ...

  4. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

    一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...

  5. 【2022国赛模拟】无损加密——LGV引理、状压DP

    原创题无来源 题目描述 题解 首先把问题稍作简化,我们可以最后把行列式乘上所有 dkd_kdk​ 的积的 nnn 次方,这样前面的过程就不用考虑 dkd_kdk​ 了,暴力也只需要变动 [lk,rk] ...

  6. 2021.8.11【提高B组模拟3】T1 积木(乱糊暴搜)(正解:状压dp)

    积木 题目大意 输入样例 3 8 7 6 3 9 4 1 10 5 输出样例 18 题目数据 解题思路 暴搜就没什么好讲的了 原本以为只有40,AC了就离谱 (数据真水) 正文:状压dp 前提:我这个 ...

  7. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

  8. 【vijos P1914】【codevs 3904】[NOIP2014 普及组T4]子矩阵(dfs+状压dp)

    P1914子矩阵 Accepted 标签:NOIP普及组2014[显示标签] 描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵 ...

  9. BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)

    (Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...

最新文章

  1. 反射拷贝对象的思路:
  2. 解读 | 2019年10篇计算机视觉精选论文(上)
  3. 你还在认为 count(1) 比 count(*) 效率高?
  4. 2019年美团,滴滴,蘑菇街Java大数据面经分享!
  5. 脑机接口--用于将音乐与思想进行合成
  6. 10月25日lol服务器维护,《LOL》lol10月25日停机维护到什么时候 10.25维护结束时间...
  7. MybatisPlus条件构造器说明以及selectPage方法
  8. webbench windows_linux下的web并发测试工具汇总:ab, siege和webbench
  9. 去广告,原来可以如此简单——ADSafe 3.5.4.520 精简版
  10. PHP_SCREW 加密
  11. 破站www.2637.cn居然敢截持偶的IE!
  12. [html] 如何让table的边框双线变单线?
  13. 几个python小程序
  14. matlab 怎么话3维图,用matlab画三维图形
  15. mongodb笔记2
  16. 孙鑫-MFC笔记六--绘图,重绘
  17. udp聊天?使用udp+python实现多人聊天室
  18. 经典FAT文件系统格式详解
  19. 也来聊聊Spring中的IOC和AOP
  20. Ubuntu 安装rar文件解压工具

热门文章

  1. 使用VMware虚拟磁盘管理工具调整磁盘大小
  2. 软件设计师23-存储器系统02
  3. 【网络安全工程师面试】—SSRF服务端请求伪造漏洞及利用方法
  4. 量化策略回测TRIXKDJ
  5. csharp与java的区别_C#与JAVA之比较(1)
  6. “工业4.0”下的可视化工厂建设方案
  7. 某集团BI决策系统建设方案分享
  8. 帆软报表决策系统重置用户密码插件
  9. 华为云龙api自动化工具_聊聊华为GDE刚发布的一体化低门槛开发平台ADC 2.0
  10. 防灾科技学院计算机好就业吗,防灾科技学院2015年毕业生就业质量报告.pdf