C++ 查找Euler';s toticent正好是k乘以c++;

C++ 查找Euler';s toticent正好是k乘以c++;,c++,C++,给定n&k。求Euler的toticent正好是k次,其中n&k是非常大的数。我正在尝试以下代码。但它并没有得到太多的优化。有人能提供有效的解决方案吗 #include <iostream> using namespace std; int gcd(int a, int b) { if (a == 0) return b; return gcd(b%a, a); } int phi(unsigned int n) { unsigned

给定n&k。求Euler的toticent正好是k次,其中n&k是非常大的数。我正在尝试以下代码。但它并没有得到太多的优化。有人能提供有效的解决方案吗

#include <iostream>
using namespace std;

 int gcd(int a, int b)
{
    if (a == 0)
        return b;
    return gcd(b%a, a);
}


int phi(unsigned int n)
{
    unsigned int result = 1;
    for (int i=2; i < n; i++)
        if (gcd(i, n) == 1)
            result++;
    return result;
}


int main()
{
    long n,i,k;
    cin >>n>>k;
    long a[n];
    for (i=1; i<=n; i++)
      a[i] = phi(i);
    for (i=1; i<=k; i++)
      n = a[n];
    cout << n<<endl;
    return 0;
}
#包括
使用名称空间std;
内部gcd(内部a、内部b)
{
如果(a==0)
返回b;
返回gcd(b%a,a);
}
整数φ(无符号整数n)
{
无符号整数结果=1;
for(int i=2;i>n>>k;
长a[n];

for(i=1;i
for(i=1;i)用于代码审查。如果您没有任何具体问题或错误,这是离题的here@SMA该循环用于迭代k次。例如,对于n=12和k=2,答案将是2,即φ(12)=4和φ(4)=2如果您为相同参数计算了几次gcd,记忆可能会有所帮助。您应该只计算phi直到k,并继续使用您使用的最后一个值。也不要每次都计算gcd,将i存储在可以引用gcd==1的位置。