C++ 查找Euler';s toticent正好是k乘以c++;
给定n&k。求Euler的toticent正好是k次,其中n&k是非常大的数。我正在尝试以下代码。但它并没有得到太多的优化。有人能提供有效的解决方案吗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
#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;ifor(i=1;i)用于代码审查。如果您没有任何具体问题或错误,这是离题的here@SMA该循环用于迭代k次。例如,对于n=12和k=2,答案将是2,即φ(12)=4和φ(4)=2如果您为相同参数计算了几次gcd,记忆可能会有所帮助。您应该只计算phi直到k,并继续使用您使用的最后一个值。也不要每次都计算gcd,将i存储在可以引用gcd==1的位置。