现代人(fraction)

题解:现代人(fraction)

题目分析

题目要求计算:
求a[i]=pk/__gcd(pk,i)

问题转化

因为p是素数
所以pk的因子只有,p0,p1,到,pn
对于任意整数
i=p^v(p)*i
因此经过推导得到代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,p;
ll ks(ll a,ll b){
	ll cnt=1; 
	while(b!=0){
		if(b&1) cnt*=a;
		a*=a;
		b/=2;
	}
	return cnt;
}//快速幂 
ll F(ll n,ll k,ll p){
    if(k==0) return n;
    ll pk=ks(p,k);
    return pk*(n-n/p)+F(n/p,k-1,p);
}//递归 
int main(){
    ll n, k, p;
    cin >> n >> k >> p;
    cout << F(n,k,p);
    return 0;
}
posted @ 2026-07-05 17:43  zhangyirui  阅读(4)  评论(0)    收藏  举报