博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11440 Help Tomisu
阅读量:5172 次
发布时间:2019-06-13

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

 

题意:

求2——n! 之间有多少个整数x,满足x的所有素因子都大于m

保证m<=n

 

x的所有素因子都大于m 等价于 x和m!互质

因为m<=n,所以n!是 m!的整数倍

所以只需要求出m!以内和m!互质的个数

答案再乘n!/ m! 即可

关键是求phifac(i)

考虑递推

phi(n)= n*(1-1/p1)*(1-1/p2)……

如果i是质数,那么phifac(i)比 phifac(i-1)多乘一个n*(1-1/n)

否则,phifac(i)比 phifac(i-1)多乘一个n

原理同阶乘质因数分解

 

 

#include
#define N 10000001#define mod 100000007using namespace std;int cnt,p[N],phi[N];long long phifac[N];bool v[N];int main(){ phi[1]=1; for(int i=2;i
=N) break; v[i*p[j]]=true; if(i%p[j]) phi[i*p[j]]=phi[i]*(p[j]-1); else { phi[i*p[j]]=phi[i]*p[j]; break; } } } int n,m; long long ans; while(scanf("%d%d",&n,&m)!=EOF) { if(!n) return 0; ans=0; phifac[1]=1; for(int i=2;i<=m;i++) if(!v[i]) phifac[i]=phifac[i-1]*(i-1)%mod; else phifac[i]=phifac[i-1]*i%mod; ans=phifac[m]; for(int i=m+1;i<=n;i++) ans=ans*i%mod; printf("%lld\n",ans-1); }}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7398072.html

你可能感兴趣的文章
搭建测试环境
查看>>
调用链监控 CAT 之 入门
查看>>
flexbox属性速览及常见布局实现
查看>>
zlib在Linux和windows中的使用
查看>>
rabbitMq实战使用
查看>>
JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
查看>>
javascript 倒计时
查看>>
web前端工程师入门须知
查看>>
linux--->linux 各个文件夹及含义
查看>>
欢迎使用CSD横竖屏切换问题占位
查看>>
2016集训测试赛(二十)Problem B: 字典树
查看>>
中文保存在properties乱码的解决
查看>>
poj题目分类
查看>>
idea 配置mybatis Generator 不显示的解决方案 和 配置MBG
查看>>
英语生疏了,每日至少一句吧
查看>>
创建打不开文件夹
查看>>
12 for循环
查看>>
redis(hash篇)
查看>>
Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏...
查看>>
Hibernate一对多关联
查看>>