模拟赛1102d2

/*
φ(n)=φ(p^k)=p^k-p^(k-1)=(p-1)*p^(k-1)
φ(m*n)=φ(m)*φ(n)
直接套公式做,因为分解质因数时,只分解一个数,所以可以不打素数表,只将n分解到√n就行了。
*/
#include<iostream>
#include<cstdio>
#define ll long long
#define N 1000010LL
using namespace std;
ll prime[N],c[N],P[N],f[N],num,n;
ll poww(ll a,ll b)
{
ll base=a,r=;
while(b)
{
if(b&)r*=base;
base*=base;
b/=;
}
return r;
}
int main()
{
freopen("phi.in","r",stdin);
freopen("phi.out","w",stdout);
cin>>n;
for(ll i=;i<=min(n,N-);i++)
{
if(!f[i])
{
prime[++num]=i;P[i]=num;
for(ll j=;i*j<=min(n,N-);j++)
f[i*j]=;
}
}
ll x=n;
for(ll i=;i<=num;i++)
{
ll p=prime[i];
while(x%p==)c[i]++,x/=p;
if(x<N)if(!f[x])
{
c[P[x]]++;break;
}
if(x==)break;
}
ll ans=;
for(ll i=;i<=num;i++)
if(c[i])ans*=(prime[i]-)*poww(prime[i],c[i]-);
if(x>N)ans*=(x-);
cout<<ans;
fclose(stdin);
fclose(stdout);
return ;
}

/*
φ(n)=φ(p1^k1+p2^k2……)=(p1-1)p1^k1-1+……=m
利用公式反推:从大到小枚举素数。
*/
#include<cstdio>
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#define N 10000010
#define ll long long
using namespace std;
bool f[N];ll n,k,prime[N/],num,ans[N/];
void gprime()
{
for(ll i=;i<=N-;i++)
{
if(!f[i])prime[++num]=i;
for(ll j=;j<=num;j++)
{
if(i*prime[j]>N-)break;
f[i*prime[j]]=;
if(i%prime[j]==)break;
}
}
}
ll gcd(ll a,ll b)
{
if(b==)return a;
return gcd(b,a%b);
}
ll mul(ll x,ll y,ll z)
{
ll r=;
while(y)
{
if(y&)r+=x,r%=z,y--;
x<<=;x%=z;y>>=;
}
return r;
}
ll poww(ll a,ll b,ll mod)
{
ll base=a,r=;
while(b)
{
if(b&)r=mul(r,base,mod);
base=mul(base,base,mod);
b>>=;
}
return r;
}
bool is_prime(ll x)//费马小定理判断素数
{
for(ll i=;i<=;i++)
{
ll y=rand()%(N-)+;
if(y<)y=y-y;
ll z=poww(y,x-,x);
if(z!=)return false;
}
return true;
}
void dfs(ll x,ll y,ll z)
{
if(x==)
{
ans[++ans[]]=y;return;
}
if(x+>prime[num]&&is_prime(x+))
ans[++ans[]]=y*(x+);
for(ll i=z;i>=;i--)
{
if(x%(prime[i]-)!=)continue;
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);
cin>>n>>k;
srand(time());
gprime();dfs(n,,num);
sort(ans+,ans+ans[]+);
for(ll i=;i<=k;i++)
cout<<ans[i]<<" ";
return ;
}

/*筛法求欧拉函数*/
#include<iostream>
#include<cstdio>
#define ll long long
#define N 10000010
using namespace std;
int n;
ll ans,f[N];
void X(ll x)
{
for(int i=;i<=x;i++)f[i]=i;
for(int i=;i<=x/;i++)
{
if(f[i]==i)
{
for(int j=i;j<=x;j+=i)
{
f[j]=f[j]*(i-)/i;
}
}
}
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
cin>>n;
X(n);ans=;
for(int i=;i<=n;i++)
{
if(f[i]==i)f[i]--;
ans+=f[i];
}
cout<<ans<<endl;
fclose(stdin);fclose(stdout);
return ;
}
模拟赛1102d2的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
- BZOJ2741: 【FOTILE模拟赛】L
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1170 Solved: 303[Submit][Status] ...
随机推荐
- 解决Ckeditor编辑器不显示html实体,自动过滤html的问题
Ckeditor 4.5.4,在编辑的时候,使用源码编辑,当保存内容包含Javascript.Style标签的时候,数据库中有Javascript.Style标签,输入到页面也可以执行,但是我再次编辑 ...
- 安装JBPM6运行环境(JBPM6学习之二)
安装Eclipse插件成功后,需要配置JBPM6的运行环境: 1. 第一步先将下载的jbpm6目录中的“jbpm-6.0.1.Final-bin.zip”找到,并解压缩到D盘根目录备用. 2. 第二步 ...
- HDU1102(最小生成树Kruskal)
开学第三周.........真快尼 没有计划的生活真的会误入歧途anytime 表示不开心不开心不开心 每天都觉得自己的生活很忙 又觉得想做的事又没有完成 这学期本来计划重点好好学算法,打码码,臭臭美 ...
- JS判断设备的类型
利用JS判断浏览器的用户代理,从而获得设备类型.利用这个方法可以获得用户的设备是移动设备还是PC设备. JS代码如下: function browerType() { ...
- git 教程(2)--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- HTTP协议与HTTPS协议区别
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议: 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套 ...
- 19 BasicTaskScheduler0 基本任务调度类基类(一)——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- 解决ckeditor中文路径无法下载,无法显示图片问题
使用ckfinder上传的文件如果是中文路径,下载的时候会找不到 假如使用tomcat服务器,找到tomcat目录>conf文件夹的server.xml>用查找找到Connector这个 ...
- ios 在中国地区,24小时时间格式 系统设定下 获得12小时制时间的方法
如题,在中国地区,24小时时间格式 系统设定下,如果单单使用 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 之后,无论用hh ...
- C++ STL 的实现:
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓 ...