博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道数学题
阅读量:4704 次
发布时间:2019-06-10

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

/*由于longlong学长在题解里把这个题略了我稍微解释一下这道题1-n乘起来最大就是 n!下面我们考虑怎么保证他是一个完全平方数对于每个数 x 我们分解成 x=p1^a1*p2^a2*p3^a3.....其中pi是质数 (他有个学名叫做 唯一分解定理)再考虑一个完全平方数有什么性质 4=2^2  16=2^4   36=2^2*3^2  144=2^4*3^2 可以看出(也可以自己证出)对于一个完全平方数x他分解完之后 每个ai都是偶数好现在思路明确 把n!分解好 对于ai是奇数的 我们把那个单独的pi扔掉即可然后说一下怎么求n!里面有几个pi如下代码中的Solve函数  ai=n/pi+n/pi^2+n/pi^3+n/pi^4.....直到pi^x>n 具体怎么证的自行研究 然后没了 另外取模的数是1e8+7 不是1e9+7 另外别忘了开longlong  */#include
#include
#define maxn 5000010#define mod 100000007#define ll long longusing namespace std;ll n,prime[maxn/10],c[maxn/10],num,ans=1;bool f[maxn];void Prime(){ for(int i=2;i<=n;i++){ if(f[i]==0)prime[++num]=i; for(int j=1;j<=num;j++){ if(i*prime[j]>maxn-10)break; f[i*prime[j]]=1; if(i%prime[j]==0)break; } }}void Solve(){ for(int i=1;i<=num;i++){ ll P=prime[i]; if(P>n)break; while(n>=P){ c[i]+=n/P;P*=prime[i]; } }}ll Qc(ll a,ll b){ ll r=1; while(b){ if(b&1)r=r*a%mod; b>>=1;a=a*a%mod; } return r%mod;}int main(){ cin>>n; Prime();Solve(); for(int i=1;i<=num;i++) if(c[i]&1)c[i]--; for(int i=1;i<=num;i++){ if(prime[i]>n)break; ans=ans*Qc(prime[i],c[i])%mod; } cout<
<

 

转载于:https://www.cnblogs.com/yanlifneg/p/10088839.html

你可能感兴趣的文章
Spring事务解析1-使用介绍
查看>>
简单的上传图片文件
查看>>
自定义缓存Memcache 以及Cache
查看>>
C#基础第二天-作业答案-九九乘法表-打印星星
查看>>
Svn正确的使用方法
查看>>
IOC原理
查看>>
js制作简单的计算器
查看>>
struts2源码分析之流程
查看>>
oracle数据库修改并查询当前最大连接数
查看>>
pageX,clientX,offsetX,layerX的区别
查看>>
数据库常用命令
查看>>
牛客寒假算法基础集训营5 炫酷镜子(dfs)
查看>>
IIS创建ftp服务器和ftp上传发布项目的步骤
查看>>
Puppy Linux 5.4 "Precise" 发布
查看>>
SQL附加命令生成
查看>>
ALV面向对象方法研究:实现方法(一)
查看>>
青蛙跳
查看>>
JavaScript(第五天)【流程控制语句】
查看>>
简单版AC自动机
查看>>
python3使用requests爬取新浪热门微博
查看>>