模拟赛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] ...
随机推荐
- 分享一个c#t的网页抓取类
using System; using System.Collections.Generic; using System.Web; using System.Text; using System.Ne ...
- 开关WIFI脚本
title wifi管理color A@echo on@echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@echo 1.启用并设定虚拟WiFi网卡;@echo 2.开启无线网络; ...
- Java多线程基础知识(六)
一. Java中的线程池 线程池的作用: 1. 降低资源消耗 2. 提高响应速度 3. 提高线程的可管理性 线程池处理流程: 1. 线程池判断核心线程池线程是否都在执行任务,如果不是,则创建一个新的工 ...
- iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // ...
- uMlet建模工具
下载:http://www.umlet.com/ 无意中发现的一款建模工具,能快速搭建数据库模型,前置安装条件是java环境. 这是我建的user模型表,2个字段name和age,2个方法getAge ...
- Markdown入门教程
Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记符号也不 ...
- linux下的shell运算(加、减、乘、除)
linux下的shell运算(加.减.乘.除) 标签: linuxshell运算加减乘除 2014-03-12 16:25 15127人阅读 评论(0) 收藏 举报 分类: linux(17) ((i ...
- 【GoLang】golang context channel 详解
代码示例: package main import ( "fmt" "time" "golang.org/x/net/context" ) ...
- 【GoLang】golang垃圾回收 & 性能调优
golang垃圾回收 & 性能调优 参考资料: 如何监控 golang 程序的垃圾回收_Go语言_第七城市 golang的垃圾回收(GC)机制 - 两只羊的博客 - 博客频道 - CSDN.N ...
- listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下. 英文说明: The ...