求逆欧拉函数(arc)
已知欧拉函数计算公式
初始公式:φ(n)=n*(1-1/p1)*(1-1/p2).....*(1-1/pm)
又 n=p1^a1*p2^a2*...*ps^as 欧拉函数是积性函数
那么:φ(n)=φ(p1^a1)* φ(p2^a2)........φ(pn^an).
#include<cstdio>
#include<ctime>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define LL long long
#define maxn 100010
#define MAXN 10000000
using namespace std;
LL n,k,prime[MAXN/],cnt,ans[maxn];
bool mark[MAXN+];
void first()
{
for(int i=;i<=MAXN;i++)
{
if(!mark[i]) prime[++cnt]=i;
for(int j=;j<=cnt;j++)
{
if(i*prime[j]>MAXN) break;
mark[i*prime[j]]=;
if(i%prime[j] ==) break;
}
}
return ;
}
LL mul(LL a,LL b,LL mod)
{
LL ans=;
while(b)
{
if(b&) ans=(ans+a)%mod;
a=(a<<)%mod;b>>=;
}
return ans;
}
LL low(LL a,LL b,LL mod)
{
LL ans=;
while(b)
{
if(b&) ans=mul(ans,a,mod);
b>>=,a=mul(a,a,mod);
}
return ans;
}
bool Is_prime(LL n)
{
if(n<) return ;
if(n==) return ;
if(n% ==) return ;
LL m=n-,j=;
while(m% == )
{
j++;
m>>=;
}
for(int i=;i<=;i++)
{
LL a=rand()%(n-)+;
LL x=low(a,m,n);
LL y;
for(int k=;k<=j;k++)
{
y=mul(x,x,n);
if(y==&&x!=&&x!=n- )
return ;
x=y;
}
if(x!=) return ;
}
return ;
}
void dfs(LL x,LL y,LL mod )
{
if(x==)
{
ans[++ans[]]=y;
return ;
}
if(x+ > prime[cnt] && Is_prime(x+))
ans[++ans[]]=y*(x+);
for(int i=mod;i>=;i--)
if(x%(prime[i]-) == )
{
LL a=x/(prime[i]-),b=y,c=;
while(a%c ==)
{
b*=prime[i];
dfs(a/c,b,i-);
c*=prime[i];
}
}
}
int main()
{
freopen("arc.in","r",stdin);
freopen("arc.out","w",stdout);
scanf("%lld%lld",&n,&k);
srand(time());
first();
dfs(n,,cnt);
sort(ans+,ans++ans[]);
for(int i=;i<=k;i++)
printf("%lld ",ans[i]);
return ;
}
求逆欧拉函数(arc)的更多相关文章
- √n求单值欧拉函数
基本定理: 首先看一下核心代码: 核心代码 原理解析: 当初我看不懂这段代码,主要有这么几个问题: 1.定理里面不是一开始写了一个n*xxx么?为什么代码里没有*n? 2.ans不是*(prime[i ...
- 【BZOJ4803】逆欧拉函数
[BZOJ4803]逆欧拉函数 题面 bzoj 题解 题目是给定你\(\varphi(n)\)要求前\(k\)小的\(n\). 设\(n=\prod_{i=1}^k{p_i}^{c_i}\) 则\(\ ...
- O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求
筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- POJ 2480 (约数+欧拉函数)
题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...
- Bzoj-2818 Gcd 欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x ...
- hdu 2824 The Euler function(欧拉函数)
题目链接:hdu 2824 The Euler function 题意: 让你求一段区间的欧拉函数值. 题解: 直接上板子. 推导过程: 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质 ...
- UVA 10214 Trees in a Wood(欧拉函数)
题意:给你a.b(a<=2000,b<=2000000),问你从原点可以看到范围在(-a<=x<=a,-b<=y<=b)内整数点的个数 题解:首先只需要计算第一象限 ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
随机推荐
- ActivityMq的使用(小例子)
一.ActivityMq的介绍: 1.什么是消息中间件?与传统的传输通讯有什么区别? 异步,无需等待,消息存放在队列里面. 2.为什么要使用消息中间件? 消息中间件可以解决高并发. 两种通讯方式:01 ...
- java-04 数组和二维数组
java 中内存分配地址值以及栈和堆得区别: ##########数组操作的两个常见小问题(越界和空指针)############## 数组索引越界异常,访问了不存在的索引: 空指针: ####### ...
- BZOJ4307: Maishroom & Class
感觉有一点题面没有说得特别明确,就是一个人代替了其他人之后,另一个可以被他代替的人就不能让他来代替自己了. 每个人向自己可以代替的人连边,额外增加一个源点$r$向所有助教连边.第一问答案是$r$不能到 ...
- Codeforces Round #394 (Div. 2) 题解
无需吟唱,直接传送 problem A 题目大意 已知有n个偶数,m个奇数,问这些数有没有可能组成一个严格递增1的序列 题解 判断abs(n,m) <= 1即可,注意n,m均为0的情况. Cod ...
- Linq 支持动态字查询集合, 也就是说根据传入的值进行查询。
Linq 支持动态字查询集合, 也就是说根据传入的值进行查询. 比如我们有个类Patient, 其中有个字段PatientName, 现在有Patient集合, 想要查询PatientName为&qu ...
- arm裸机程序启动流程
arm裸机程序启动流程 1373 Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader) ...
- 47: error: undefined reference to `QWebView::QWebView(QWidget*)'
QT 5.6版本 用Qt界面设计器打开界面文件,在界面上托入QWebView控件,这时运行会出现错误,错误如下: ......... undefined reference to `QWebView ...
- centos7 install pip
1. 安装过程 yum -y install epel-release yum install python-pip pip install --upgrade pip
- linux查询内存真是利用率
使用top工具查看到Suse Linux的内存占用率很大,可能97%以上,我知道这是Linux的内存使用机制,先将内存整个管理起来,需要的时候在分配给单个进程.但是如果我需要查看系统真实的内存占用率应 ...
- 为什么选择Netty
支持高并发访问 比核心 Java API 更好的吞吐量,较低的延时资源消耗更少,这个得益于共享池和重用减少内存拷贝 https://baike.baidu.com/item/Netty/1006162 ...