CodeForces 776E 数学规律,欧拉

CodeForces 776E

题意:定义f(n)为(x,y)的对数,x和y要满足 x>0, y>0, x+y=n, x与y互质。 定义g(n)为f(x1)+f(x2)+......+f(xk),xi为n的因子。

再定义Fk(n)为     给定n和k,求Fk(n)。

tags: 好假的题。。推理或者找规律,f(n)=phi(n), g(n)=n。。。

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a;i<=b;i++)
#define per(i,b,a) for (int i=b;i>=a;i--)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MP make_pair
#define PB push_back
#define fi  first
#define se  second
typedef long long ll;
const int N = 200005, mod = 1000000007;

ll n, k;
ll  phi(ll n)
{
    ll ans=n;
    for(ll i=2; i*i<=n; ++i)
        if(n%i==0)
    {
        ans= ans/i*(i-1);
        while(n%i==0)  n/=i;
    }
    if(n>1) ans= ans/n*(n-1);
    return ans;
}
int main()
{
    scanf("%lld %lld", &n, &k);
    ll cnt=0;
    while(n!=1 && cnt<(k+1)/2)
    {
        ++cnt, n=phi(n);
    }
    printf("%lld
", (n+mod)%mod);

    return 0;
}
原文地址:https://www.cnblogs.com/sbfhy/p/7137061.html