博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1091 跳蚤
阅读量:6860 次
发布时间:2019-06-26

本文共 1281 字,大约阅读时间需要 4 分钟。

点开POJ,看到一道中文题,就点开看了看,发现这题我好像不会

参考了这篇博客:

对于跳蚤来说,需要选出一组整数x1,x2,x3......xn满足a1*x1+a2*x2+a3*x3+...+an*xn=1,其中an=m

而这个方程有解的充要条件就是a1,a2,a3......an互质

正难则反,我们考虑有多少是不满足互质的,将m质因数分解,枚举素因子,利用容斥完成这道题

(之前也不会这种容斥的写法,想了想觉得很有道理)

#include
#include
using namespace std;typedef long long ll;const int N=200;int n,m;int p[N],tot,d[N];ll ans;ll qpow(ll x,ll y){ ll ret=1; while(y) { if(y&1) ret=ret*x; x=x*x; y>>=1; } return ret;}void div(int x){ /* int t=2; while(x!=1) { if(x%t==0) p[++tot]=t; while(x%t==0) x/=t; t++; }*/ // for(int i=1;i<=tot;i++) printf("%d%c",p[i],"*\n"[i==tot]); for(int i=2;i*i<=x;i++) { if(x%i==0)p[++tot]=i,x/=i; while(x%i==0) x/=i; } if(x>1) p[++tot]=x;}ll qaq;void dfs(int st,int dep,int up){ if(dep==up+1) { int x=m; for(int i=1;i<=up;i++) x/=d[i]; qaq+=qpow(x,n); return ; } for(int i=st;i<=tot;i++) { d[dep]=p[i]; dfs(i+1,dep+1,up); }}int main(){ while(~scanf("%d%d",&n,&m)) { tot=0;ans=0; div(m); for(int i=1;i<=tot;i++) { qaq=0; dfs(1,1,i); if(i&1) ans+=qaq; else ans-=qaq; } printf("%lld\n",qpow(m,n)-ans); } return 0;}

 

转载于:https://www.cnblogs.com/pigba/p/8980291.html

你可能感兴趣的文章
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>
linux网络相关命令使用
查看>>
java基础(二)
查看>>
cocos2d中的anchorPoint
查看>>
记录一下:chrome上,把网页保存为文件的插件
查看>>
C#和Javascript间互转的Xxtea加解密
查看>>
BAT批处理中的字符串处理详解(字符串截取)
查看>>
智力题集锦【二】
查看>>
读 《我为什么放弃Go语言》 有感
查看>>
删除MySQL中冗余字段
查看>>
linux基础—课堂随笔_03 SHELL脚本编程基础
查看>>
【Win7快捷键启动程序有哪些妙招】
查看>>
MS DOS 命令大全
查看>>
College student reflects on getting started in open source(一)
查看>>
Windows下初次手动安装composer详细教学
查看>>
Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、...
查看>>
JAVA入门到精通-第53讲-数据库概念
查看>>
升级10.10 Yosemite 后,cocoapods 出现错误(解决方案)
查看>>
[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...
查看>>
SQL ROW_NUMBER() 分页使用示例
查看>>