C++数论板题(弹药科技):Lengendre定理和欧拉函数
弹药科技
时间限制: 1 Sec 内存限制: 128 MB
题目描述
经过精灵族全力抵挡,精灵终于坚持到了联络系统的重建,于是精灵向人类求助,
大魔法师伊扎洛决定弓}用博士的最新科技来抗敌。 伊扎洛:“博士,还没好吗?” 博士:“只差一步了!只需要在正确的位置装上弹药就可以了!”博士的最新科技是全新的炸弹,但是现在还需要一步装弹药的操作。博士的炸弹有N!个位置可以装弹药(>.<),但是只有在正确的位置装上弹药才能启动,博士将装弹药的位置编号为1到N!,一个位置i需要装弹药,当且仅当gcd(i, N!) ≠ 1且 N! mod i ≠0,现在博士不要求你求出所有装弹药位置,只需要你求出满足要求 的位置的数量就可以了。
输入 一个数N
输出
表示满足要求的位置数量,答案对mod1000000007输出
样例输入
4
样例输出
9
提示 【数据范围】
N <= 1000000
N!为总方案数。那么题目要求的答案便是总方案数n!减去与n!互质的数与n!的所有因子。
与n!互质的数容易想到使用欧拉函数来求
\(\varphi(n)=n*\frac{p_{1}}{(p_{1}-1)}*\frac{p_{2}}{(p_{2}-1)}*...*\frac{p_{n}}{p_{n}-1})\)
其中\(p_{i}\)表示把n分解成质因数的结果。
n!的因数个数也可以这么求\((w_{1}+1)*(w_{2}+1)*...*(w_{n}+1)\)
w为唯一分解后质数的指数。
需要注意的是,w不能直接求,需要用Lengendre定理。(这里Lengendre定理不能求模)
#include<iostream>
#include<cstdio>
using namespace std;
#define N 1000010
#define MOD 1000000007
#define LL long long
LL idx[N],prime[N],n,cnt,phi,fac=1,sum=1;
bool vis[N];
void Euler(int n) {
for(int i=2;i<=n;i++) {
if(vis[i]==0)
prime[++cnt]=i;
for(int j=1;j<=cnt && 1ll*i*prime[j]<=n;j++) {
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
LL LG(LL n,LL P) {
LL ans=0,sum=P;
while(n>=sum) {
ans=(ans+n/sum);
sum=sum*P;
}
return ans;
}
LL qkpow(LL base,LL indexx)
{
LL fuck=1;
while(indexx>0)
{
if(indexx&1)
fuck=fuck*base%MOD;
base=base*base%MOD;
indexx>>=1;
}
return fuck%MOD;
}
LL inv(LL sum) {
return qkpow(sum,MOD-2);
}
int main() {
cin>>n;
Euler(n);
for(int i=1;i<=n;i++)
fac=(1ll*fac*i)%MOD;
phi=fac;
for(int i=1;i<=cnt;i++) {
phi=1ll*phi*(prime[i] - 1)%MOD*inv(prime[i]) %MOD;
sum=(1ll*sum*(LG(n,prime[i])+1)%MOD)%MOD;
}
cout<<(fac-phi+MOD+MOD-sum+1)%MOD;
}
C++数论板题(弹药科技):Lengendre定理和欧拉函数的更多相关文章
- UVA10200-Prime Time/HDU2161-Primes,例题讲解,牛逼的费马小定理和欧拉函数判素数。
10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间 ...
- [Sdoi2010]古代猪文 (卢卡斯定理,欧拉函数)
哇,这道题真的好好,让我这个菜鸡充分体会到卢卡斯和欧拉函数的强大! 先把题意抽象出来!就是计算这个东西. p=999911659是素数,p-1=2*3*4679*35617 所以:这样只要求出然后再快 ...
- 【数论】【筛法求素数】【欧拉函数】bzoj2818 Gcd
gcd(x,y)(1<=x,y<=n)为素数(暂且把(x,y)和(y,x)算一种) 的个数 <=> gcd(x/k,y/k)=1,k是x的质因数 的个数 <=> Σ ...
- 中国剩余定理(CRT)与欧拉函数[数论]
中国剩余定理 ——!x^n+y^n=z^n 想必大家都听过同余方程这种玩意,但是可能对于中国剩余定理有诸多不解,作为一个MOer&OIer,在此具体说明. 对于同余方程: x≡c1(mod m ...
- hdu1286(找新朋友)&&POJ2407Relatives(欧拉函数模版题)
http://acm.hdu.edu.cn/showproblem.php?pid=1286 没什么好说的,模板题,主要是弄懂欧拉函数的思想. #include <iostream> #i ...
- XDU 1098 (欧拉函数模板题)
原题链接,点击此处 欧拉函数:φ(N)表示对一个正整数N,欧拉函数是小于N且与N互质的数的个数 通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/p ...
- Exponial~(欧拉函数)~(发呆题)
Description Everybody loves big numbers (if you do not, you might want to stop reading at this point ...
- 数论 - 欧拉函数模板题 --- poj 2407 : Relatives
Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11372 Accepted: 5544 Descri ...
- 【poj 2407】Relatives(数论--欧拉函数 模版题)
题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质: 1.若p是质数,Φ(p)=p-1: 2.欧拉函数是积性函 ...
随机推荐
- 接口--Comparable接口【哈夫曼树】
我们在字符串中见到过CompareTo方法,知道这个方法是用于比较字符串顺序的,根据字典顺序进行排序.Java中很多类也都有CompareTo方法,甚至于排序算法的底层组成也是依赖于比较的,而这个比较 ...
- java script简介
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- [转]使用screw plus来保护php代码安全
原文链接 https://www.jianshu.com/p/f6425e2f8643 https://github.com/del-xiong/screw-plus http://git.oschi ...
- ALV编辑数据后未更新到内表
在调用 ‘I_CALLBACK_USER_COMMAND’的时候定义 DATA: GR_ALV TYPE REF TO CL_GUI_ALV_GRID. "alv数据更改后更新到内表 CAL ...
- Git简单生成生成公钥和私钥方法
Git简单生成生成公钥和私钥方法 Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” g ...
- command not found解决方案
如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found.那么 首先就要考虑root 的$PATH里是否已经包含了这些环境变量 ...
- VLC 用到的那些 YUV 格式
YUV是视频应用中使用的一类像素格式.YUV实际上是所有“YUV”像素格式共有的颜色空间的名称. 与RGB格式(红 - 绿 - 蓝)相对应,YUV颜色用一个称为Y(相当于灰度)的“亮度”分量和两个“色 ...
- java数据结构分析
java数据结构分析 此文章内容参考于:http://www.cnblogs.com/ysocean/ 一.数据结构总览图 1.数组 2.链表 3.栈 4.队列 5.二叉树 6.堆 7.散列 8.红黑 ...
- nodejs前端接口与状态转换调试
和UI无关的逻辑用browser 调有时不太方便,配置 node 命令行调试环境方法如下: cnpm install @babel/core @babel/cli @babel/register @b ...
- Vue源码学习(二)$mount() 后的做的事(1)
Vue实例初始化完成后,启动加载($mount)模块数据. (一)Vue$3.protype.$mount 标红的函数 compileToFunctions 过于复杂,主要是生 ...