题意:

求满足\(phi(a)=n\)的\(a\)的个数。(\(n \le 10^{10}\))

分析

这种题一开始就感觉是搜索= =

题解

首先容易得到

\[\phi(n) = \prod_{i} p_i^{a_i-1} (p_i - 1)
\]

然后我们\(O(n^{0.5})\)预处理以下前\(n^{0.5}\)的素因子,然后再用\(O(n^{0.5}log(n))\)筛出大质数,然后从小到大一层一层搜下去即可,注意特判一下\(n=1\)的情况。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e10, Lim=1e5+5, Ml=1e9;
int tot, ans, p[Lim+5], np[Lim+5], pcnt;
ll b[5000005];
struct dat {
ll p;
int l;
}a[Lim<<1];
void init() {
for(int i=2; i<=Lim; ++i) {
if(!np[i]) p[pcnt++]=i;
for(int j=0; j<pcnt; ++j) {
int t=i*p[j];
if(t>Lim) break;
np[t]=1;
if(i%p[j]==0) break;
}
}
}
ll rand(ll l, ll r) {
static ll MD=1e9+7, g=78125, now=1998;
now*=g; if(now>=MD) now%=MD;
return l+now%(r-l+1);
}
ll mul(ll a, ll b, ll m) { if(a<=Ml && b<=Ml) return a*b%m; if(b>a) swap(b, a); ll x=0; for(; b; b>>=1, a=(a+a)%m) if(b&1) x=(x+a)%m; return x; }
ll ipow(ll a, ll b, ll m) { ll x=1; for(; b; b>>=1, a=mul(a, a, m)) if(b&1) x=mul(x, a, m); return x; }
bool check(ll x) {
if(x<=Lim) return !np[x];
if((x%2)==0 || (x%3)==0 || (x%5)==0 || (x%7)==0 || (x%11)==0 || (x%13)==0) return 0;
int cnt=0; ll d=x-1; while(!(d&1)) d>>=1, ++cnt;
for(int T=0; T<=50; ++T) {
ll t=ipow(rand(2, x-1), d, x), pre=t;
for(int i=1; i<=cnt; ++i, pre=t) {
t=mul(t, t, x);
if(t==1 && pre!=1 && pre!=x-1) return 0;
}
if(t!=1) return 0;
}
return 1;
}
void pre(ll n) {
tot=0;
int sq=sqrt(n+0.5)+1;
for(int i=0; i<pcnt; ++i) {
if(p[i]>sq) break;
if(n%(p[i]-1)==0) {
ll t=n/(p[i]-1);
a[tot].p=p[i];
while(t%p[i]==0)
++a[tot].l, t/=p[i];
++tot;
}
}
for(int i=sq; i>=1; --i) if(n%i==0) {
ll pr=n/i+1; if(pr<=sq) continue;
if(check(pr))
a[tot].p=pr, a[tot++].l=0;
}
// printf("tot:%d\n", tot);
// for(int i=0; i<tot; ++i)
// printf("%lld ", a[i].p); puts("");
}
void dfs(int x, ll n, ll now) {
if(n==1) {
if(x==0) now*=2;
b[ans++]=now;
return;
}
if(x>=tot) return;
dfs(x+1, n, now);
ll pr=a[x].p;
int l=a[x].l;
if(n%(pr-1)) return;
now*=pr;
n/=pr-1;
dfs(x+1, n, now);
for(int j=0; j<l; ++j) {
if(n%pr) break;
now*=pr;
n/=pr;
dfs(x+1, n, now);
}
}
void work(ll n) {
ans=0;
dfs(0, n, 1);
printf("%d\n", ans);
sort(b, b+ans);
for(int i=0; i<ans; ++i)
printf("%lld%c", b[i], " \n"[i==ans-1]);
}
int main() {
int T; scanf("%d", &T);
init();
while(T--) {
ll n;
scanf("%lld", &n);
if(n&1) {
if(n==1) puts("2\n1 2");
else puts("0");
continue;
}
pre(n);
work(n);
}
return 0;
}

【BZOJ】3737: [Pa2013]Euler的更多相关文章

  1. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  2. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  3. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  4. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  5. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  6. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

  7. 【BZOJ】【2434】【NOI2011】阿狸的打字机

    AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...

  8. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

  9. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

随机推荐

  1. CentOS Linux解决Device eth0 does not seem to be present

    在VMware里克隆出来的Centos Linux.. ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: 解决办法: 首先,打开/etc/udev/rules.d/70 ...

  2. 阿里巴巴分布式服务框架dubbo学习笔记

    Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...

  3. Spring中配置和读取多个Properties文件--转

    public class PropertiesFactoryBeanextends PropertiesLoaderSupportimplements FactoryBean, Initializin ...

  4. Bash 什么时候会给 HOME 赋初始值

    今天无意发现下面这个表现: $  env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ...

  5. Linux下如何不停止服务,清空nohup.out文件

    tips:最近发现有不少人在百度这个问题,当初如易我也是初学者,随便从网上搜了一下,就转过来了,不过为了避免搜索结果同质化,为大家提供更翔实的参考,我将nohup.out相关知识整理汇总如下: 1.n ...

  6. tyvj1013 找啊找啊找GF

    描述 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见.""诶,别再见啊..."七夕...七夕...七夕这个日子,对于sqybi这种单身的 ...

  7. PHP同时上传“多个”文件示例,并格式化$_FILES数组信息

    方法1: 在html表单,放置多个文件选择框, 使用数组名作为组件的名字,如下: <form action="upload.php" method="post&qu ...

  8. T-SQL实用查询之分析数据库表的大小

    IF OBJECT_ID('tempdb..#TB_TEMP_SPACE') IS NOT NULL DROP TABLE #TB_TEMP_SPACE GO CREATE TABLE #TB_TEM ...

  9. python基础三

    多级菜单 多级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 #!/usr/bin/env python # -*- coding: utf-8 -*- menu = { '北京':{ '海淀 ...

  10. textarea输入回车,前台jsp不回车问题解决

    jsp引入标签: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"% ...