首先枚举$n$的每个约数$d$,检查一下$d+1$是否是质数,这些数都有可能作为答案的质因子出现。

考虑爆搜,每次枚举下一个要在答案中出现的质因子$p$,将$n$除以$p-1$,再枚举$p$的指数,然后递归搜索。

需要加一些剪枝:

$1.$当$n=1$的时候说明找到了一组合法解,直接返回。

$2.$只有当$p-1|n$时才有可能有解,因此设$g[i][j]$表示第$i$个约数在第$j$个质数之后第一个能被整除的位置。

那么可以沿着$g$进行枚举,每次枚举到的必然是$n$的约数。

$3.$对于如何判断一个$d$是$n$的第几个约数,可以用两个数组进行重标号:

$small[d]$表示$d(d\leq\sqrt{n})$是$n$的第几个约数。

$big[d]$表示$\frac{n}{d}(\frac{n}{d}>\sqrt{n})$是$n$的第几个约数。

#include<cstdio>
#include<algorithm>
typedef long long ll;
const int N=1000000,M=5000;
int T,lim,m,d,cnt,i,j,p[N/10],tot,small[N],big[N],g[M][700];bool v[N];ll n,a[M],b[M],q[N];
inline bool check(ll n){
if(n<N)return !v[n];
for(int i=2;1LL*i*i<=n;i++)if(n%i==0)return 0;
return 1;
}
void dfs(int x,ll S,ll p){
if(p==1){q[cnt++]=S;return;}
x=g[p<=lim?small[p]:big[n/p]][x];
if(x==m)return;
dfs(x+1,S,p);
for(dfs(x+1,S*=a[x],p/=a[x]-1);p%a[x]==0;dfs(x+1,S*=a[x],p/=a[x]));
}
int main(){
for(i=2;i<N;i++){
if(!v[i])p[tot++]=i;
for(j=0;j<tot&&i*p[j]<N;j++){
v[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
scanf("%d",&T);
while(T--){
scanf("%lld",&n);
if(n==1){puts("2\n1 2");continue;}
for(lim=1;1LL*(lim+1)*(lim+1)<=n;lim++);
for(cnt=m=d=0,i=1;i<=lim;i++)if(n%i==0){
if(check(i+1))a[m++]=i+1;
b[d++]=i;
if(1LL*i*i!=n){
if(check(n/i+1))a[m++]=n/i+1;
b[d++]=n/i;
}
}
std::sort(a,a+m),std::sort(b,b+d);
for(i=0;i<d;i++){
if(b[i]<=lim)small[b[i]]=i;else big[n/b[i]]=i;
for(g[i][m]=m,j=m-1;~j;j--)g[i][j]=b[i]%(a[j]-1)?g[i][j+1]:j;
}
dfs(0,1,n);
std::sort(q,q+cnt);
printf("%d\n",cnt);
if(cnt)for(printf("%lld",q[0]),i=1;i<cnt;i++)printf(" %lld",q[i]);
puts("");
}
return 0;
}

BZOJ3737 : [Pa2013]Euler的更多相关文章

  1. 【BZOJ】3737: [Pa2013]Euler

    题意: 求满足\(phi(a)=n\)的\(a\)的个数.(\(n \le 10^{10}\)) 分析 这种题一开始就感觉是搜索= = 题解 首先容易得到 \[\phi(n) = \prod_{i} ...

  2. [BZOJ]3737 [Pa2013]Euler

    从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  5. The Euler function[HDU2824]

    The Euler functionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...

  6. Euler Tour Tree与dynamic connectivity

    Euler Tour Tree最大的优点就是可以方便的维护子树信息,这点LCT是做不到的.为什么要维护子树信息呢..?我们可以用来做fully dynamic connectivity(online) ...

  7. nyoj998(euler)

    题意:题意:给出n和m,求满足条件gcd(x, n)>=m的x的gcd(x, n)的和,其中1<=x<=n,1<= n, m <= 1e9:思路:此题和nyoj1007差 ...

  8. nyoj1007(euler 函数)

    euler(x)公式能计算小于等于x的并且和x互质的数的个数: 我们再看一下如何求小于等于n的和n互质的数的和, 我们用sum(n)表示: 若gcd(x, a)=1,则有gcd(x, x-a)=1: ...

  9. [家里蹲大学数学杂志]第237期Euler公式的美

    1 Euler 公式 $e^{i\pi}+1=0$ (1) 它把 a.  $e:$ 自然对数的底 $\approx 2. 718281828459$ (数分) b.  $i$: 虚数单位 $=\sqr ...

随机推荐

  1. SQL Server等待

    等待大概分为3类:资源等待.队列等待.外部等待 过滤掉系统相关的等待类型的语句.(查看常用的等待信息) SELECT wait_type , signal_wait_time_ms , wait_ti ...

  2. expdp、impdp 使用sys用户操作时的注意事项

    https://blog.csdn.net/ctypyb2002/article/details/78420711

  3. jmeter4.x centos7部署笔记

    1. jmeter依赖 java8或以上版本 安装 java : 参考  https://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/ ...

  4. [转]maven全局配置文件settings.xml详解

    概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径. Paste_Image.png settings.xm ...

  5. 强大的xargs

    xargs 命令是最重要的 Linux 命令行技巧之一.你可以使用这个命令将命令的输出作为参数传递给另一个命令.例如,搜索 png 文件然后对其进行压缩或者其它操作: find. -name *.pn ...

  6. nginx proxy_pass指令’/’注意事项

    1. proxy_pass配置说明 不带/ location /test/ { proxy_pass http://t6:8300; } 带/ location /test/ { proxy_pass ...

  7. 【AtCoder】AGC014

    AGC014 链接 A - Cookie Exchanges 发现两个数之间的差会逐渐缩小,所以只要不是三个数都相同,那么log次左右一定会得到答案 #include <bits/stdc++. ...

  8. 【Android】Android 代码判断是否获取ROOT权限(一)

    [Android]Android 代码判断是否获取ROOT权限 方法比较简单,直接粘贴代码 public synchronized boolean getRootAhth() { Process pr ...

  9. 51nod1967 路径定向 Fleury

    题目传送门 题解 几乎是Fleury模板题. 一开始我们把图看作无向图,然后对于度为奇数的点增边,使得整个图的所有点都是偶数的. 然后跑一遍欧拉回路 Fleury ,所有的边就定向好了~ 代码 #in ...

  10. rest模式get,post,put,delete简单讲解

    1.请求方法为get时,会向数据库请求数据,类似于select语言,只能达到查询的效果,不会添加,修改,不会影响资源的内容,无副作用 2.请求方法为post时,该方法,用于向服务器添加数据,可以改变数 ...