现代人(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;
}

浙公网安备 33010602011771号