「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇
A. 神炎皇
很好的一道题,可能第一次在考场上遇到欧拉函数
题意:对于一个整数对 $(a,b)$,若满足 $a\times b\leq n$且$a+b$是$a\times b$的因子,
则称为神奇的数对。问这样的数对共有个?
首先式子同时除一个$gcd(a,b)$,那么设$d=gcd(a,b)$,则$a=A/d,b=B/d$,
所以因为$a$,$b$,中已经将因子全部提出,所以$a\times b$与$a+b$是互质的
然后设$k$为$d/(a+b)$,显然$k\times (a+b)\times (a+b)\leq n$
因此$k\leq n/(x\times x)$
同时对于$a+b$我们只需枚举到$\sqrt{n} $即可
那么考虑范围,对于每个枚举的$i=a+b$,那么显然$k$的取值是$n/(i*i)$,
然后对于$i$我们可以求出$\varphi {i}$,
因为$a+b=i$,所以对于每个与$i$互质的数$x$可得$gcd(i,x)==1$,即
$gcd(i-x,x)==1$。
时间复杂度$O(\sqrt{n} )$.
#include<bits/stdc++.h>
#define MAXN 11000000
#define int long long
using namespace std;
int phi[MAXN],vis[MAXN],pri[MAXN];
int n;
int read(){
int x=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x;
}
void shai(){
for(int i=2;i<=sqrt(n);++i){
if(!vis[i]){vis[i]=1;pri[++pri[0]]=i;phi[i]=i-1;}
for(int j=1;j<=pri[0],i*pri[j]<=sqrt(n);++j){
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
vis[i*pri[j]]=1;
break;
}
phi[i*pri[j]]=phi[i]*(pri[j]-1);
vis[i*pri[j]]=1;
}
}
}
int ans=0;
signed main(){
n=read();
shai();
for(int i=1;i*i<=n;++i){
ans=ans+(n/(i*i))*phi[i];
//printf("i=%lld ans=%lld %lld\n",i,ans,phi[i]);
}
printf("%lld\n",ans);
}
B. 降雷皇
线段树优化DP。也可以CDQ分治。
C. 幻魔皇
很好题递推题。
首先每层的黑色节点数,白色节点数一定是斐波那契数列。
证明的话:首先每层节点数=每层黑色节点数+每层白色节点数=上层节点数+上上层节点数,是斐波那契数列
黑色节点数=上层节点数,白色节点数=上上层节点数,所以都是斐波那契数列。
统计几个数组$fw_{i}$表示以白点为根的子树深度为$i$时的白点个数(深度从零开始)
$fb_{i}$表示以黑点为根的子树深度为$i$时的黑点个数,
然后统计出$sumw_{i}$,$sumb_{i}$即前缀和
然后我们发现对于以某一黑点或白点为根时只要深度一样其最终的形状一定相同
那么我们就可以分类讨论,两个白点组成路径:
$1.$以白点为$lca$时:
$ans_{i}=fw_{i}\times sumw_{n-i-1}$
即我们假设一点为根节点,那么我们考虑有多少子树符合情况,显然是个前缀和
$2.$以黑点为$lca$时
$ans_{i}=\sum_{k}^{i-1} fw_{k-1}\times fb_{i-k-1}\times sumb_{n-1-max(k,i-k)}$
我们以黑点为$lca$那么枚举他的两个子树的白点深度,再统计出他的子树个数。
#include<bits/stdc++.h>
#define MAXN 11000000
#define int long long
using namespace std;
int n;
const int mod=123456789;
int read(){
int x=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x;
}
int f_w[MAXN],f_b[MAXN],sum_w[MAXN],sum_b[MAXN];
int ans[MAXN];
signed main(){
n=read();
f_w[0]=1;f_w[1]=0;f_w[2]=1;f_w[3]=1;
for(int i=4;i<=n;++i){
f_w[i]=(f_w[i-1]+f_w[i-2])%mod;
}
f_b[0]=0;f_b[1]=1;
for(int i=2;i<=n;++i){
f_b[i]=(f_b[i-1]+f_b[i-2])%mod;
}
sum_w[0]=f_w[0];sum_b[0]=f_b[0];
for(int i=1;i<=n;++i){
sum_w[i]=(sum_w[i-1]+f_w[i])%mod;
sum_b[i]=(sum_b[i-1]+f_b[i])%mod;
}
for(int i=1;i<=n*2;++i){
ans[i]=(ans[i]+f_w[i]*sum_w[n-i-1])%mod;
//printf("ans[%lld]=%lld\n",i,ans[i]);
}
for(int i=3;i<=n*2;++i){
for(int k=1;k<=i-1;++k){
ans[i]=(ans[i]+f_w[k-1]%mod*f_b[(i-k)-1]%mod*sum_b[n-1-max(k,i-k)]%mod)%mod;
//printf("ans[%lld]=%lld k=%lld\n",i,ans[i],k);
}
}
for(int i=1;i<=2*n;++i){
printf("%lld ",ans[i]);
}
}
「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇的更多相关文章
- ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】
I - Gcd HYSBZ - 2818 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample In ...
- 【bzoj4804】欧拉心算 欧拉函数
题目描述 给出一个数字N 输入 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10^7 输出 按读入顺序输出答案. 样例输入 1 1 ...
- 【poj 2407】Relatives(数论--欧拉函数 模版题)
题意就是求10^9以内的正整数的欧拉函数(Φ(n)表示<=n的与n互质的正整数个数). 解法:用欧拉筛和欧拉函数的一些性质: 1.若p是质数,Φ(p)=p-1: 2.欧拉函数是积性函 ...
- 「POJ3696」The Luckiest number【数论,欧拉函数】
# 题解 一道数论欧拉函数和欧拉定理的入门好题. 虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧. 首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\ ...
- 【BZOJ4173】数学 欧拉函数神题
[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...
- BZOJ4916 神犇和蒟蒻(欧拉函数+杜教筛)
第一问是来搞笑的.由欧拉函数的计算公式容易发现φ(i2)=iφ(i).那么可以发现φ(n2)*id(n)(此处为卷积)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 .这样就有了杜教筛所要求的容易算 ...
- 【欧拉函数】 poj 2478
递推法求欧拉函数: #include <iostream> #include <cstdio> #include <cstring> using namespace ...
- HDU2588:GCD(欧拉函数的应用)
题目链接:传送门 题目需求:Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.(2& ...
随机推荐
- git的一些常用命令总结
1.拉取代码Git clone "链接名称" 2.新建分支 git checkout -b "分支名称" 3.提交代码步骤 (1)Git status查看项目 ...
- ThreadLocal引起的一次线上事故
> 线上用户存储数据后查看提示无权限 前言 不知道什么时候年轻的我曾一度认为Java没啥难度,没有我实现不了的需求,没有我解不了的bug 直到我遇到至今难忘的一个bug . 线上用户存储数据后查 ...
- Django(21)migrate报错的解决方案
前言 在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本.映射到数据库中.创建新的表或者修改表的结构. 问题1:migrate怎么判断哪 ...
- 【近取 key】技术规格说明书
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 技术规格说明书 我在这个课程的目标是 进一步提升工程化开发能力,积累团队协作经验,熟悉全栈开发流程 ...
- 传统 BI 如何转大数据数仓
前几天建了一个数据仓库方向的小群,收集了大家的一些问题,其中有个问题,一哥很想去谈一谈--现在做传统数仓,如何快速转到大数据数据呢?其实一哥知道的很多同事都是从传统数据仓库转到大数据的,今天就结合身边 ...
- 在ZOHO企业网盘中如何快速搜索文件?
现在越来越多的企业采用企业网盘来存储文档和资料,而且现在市面上的企业网盘各种各样.在使用企业网盘过程中,很多用户会问到企业网盘中如何快速搜索文件的问题.但是无论是"标签"功能还是普 ...
- VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"
阅文时长 | 0.34分钟 字数统计 | 596.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"』 ...
- APP专项测试实战1
首先,如果测试需要用到的话,还是建议一下大家去看下Android-studio的官方文档.文档地址:Documentation | Android 开发者 | Android Develope ...
- git远端账号问题
1. gitlab密码修改后git因保存密码无法下载,403 在.git/config添加如下 [credential] helper = store 添加了此项配置之后, github的账号信息就会 ...
- [刷题] 75 Sort Colors
要求 给只有0 1 2三个元素的数组排序 思路 方法1:遍历数组,利用辅助数组保存三个元素的个数,再写入(遍历两遍) 辅助数组有三个元素,对应0 1 2的个数 方法2:模拟三路快排,遍历一遍完成排序 ...