codeforces 776E The Holmes Children

codeforces 776E The Holmes Children

题目传送门

题意

定义f(n)为满足x+y=n并且gcd(x,y)=1的有序正整数对个数,定义g(n)=d|nf(nd),定义Fk(n)如下:

Fk(n)={f(g(n))k=1g(Fk1(n))k>1k%mod=0f(Fk1(n))k>1k%mod=1

给出nk,求Fk(n)(1n,k1012)

题解

首先观察f(n),可以比较容易地推出f(n)=ϕ(n)。推导过程如下:我们先假设一对(x,y),使得x+y=n并且gcd(x,y)=k1,于是我们可以推出gcd(x,nx)=kkxnx的一个因数,所以k也是n的一个因数,那么gcd(n,x)=k,所以我们可以得知所有不满足条件的正整数对(x,y)x都不是与n互质的,所以满足条件的就是和n互质的那些,那么这个就是求欧拉函数了。
然后我们去看g(n),可以退出g(n)=n,因为一个数所有因数的欧拉函数之和等于这个数本身。推导过程如下:假设n=ab,那么ϕ(b)为所有与bgcd为1的数,那么这些数与ngcda,所以所有与ngcda的数都会对ϕ(b)作出1的贡献,而由于每个小于n的数都与n有一个gcd,所以每个数一定都会作出1的贡献,最后答案就是n
知道这两个结论之后,就可以将Fk(n)变成ϕk+12(n),即求k+12次的欧拉函数,而由于欧拉函数的值求到log次左右之后就会变成1,所以我们最多求log次欧拉函数,直到n=1的时候,就可以直接输出答案了,总的复杂度为O(lognn)

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool Finish_read;
template<class T>inline void read(T &x){Finish_read=0;x=0;int f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;if(ch==EOF)return;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();x*=f;Finish_read=1;}
template<class T>inline void print(T x){if(x/10!=0)print(x/10);putchar(x%10+'0');}
template<class T>inline void writeln(T x){if(x<0)putchar('-');x=abs(x);print(x);putchar('\n');}
template<class T>inline void write(T x){if(x<0)putchar('-');x=abs(x);print(x);}
/*================Header Template==============*/
#define PAUSE printf("Press Enter key to continue..."); fgetc(stdin);
const ll Md=1e9+7;
ll n,k;
/*==================Define Area================*/
ll Euler(ll x) {
    ll res=x;
    for(ll i=2ll;i*i<=x;i++) {
        if(x%i==0) {
            res=res-res/i;
            while(x%i==0) x/=i;
        }
    }
    if(x>1) res-=res/x;
    return res;
}

void Calc() {
	ll c=(k+1)/2;
	ll res=Euler(n);
	c--;
	while(c--) {
		res=Euler(res);
		if(res==1) break;
	}
	printf("%lld\n",res%Md);
}

int main() {
	read(n);read(k);
	Calc();
	return 0;
}
posted @   Apocrypha  阅读(292)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示