0

このC++をPythonに変換しようとしています。私はPythonのみを練習しており、C /C++にはまだ触れていません。

int phi(const int n)
{
  // Base case
  if ( n < 2 )
    return 0;

  // Lehmer's conjecture
  if ( isprime(n) )
    return n-1;

  // Even number?
  if ( n & 1 == 0 ) {
    int m = n >> 1;
    return !(m & 1) ? phi(m)<<1 : phi(m);
  }

  // For all primes ...
  for ( std::vector<int>::iterator p = primes.begin();
        p != primes.end() && *p <= n;
        ++p )
  {
    int m = *p;
    if ( n % m  ) continue;

    // phi is multiplicative
    int o = n/m;
    int d = binary_gcd(m, o);
    return d==1? phi(m)*phi(o) : phi(m)*phi(o)*d/phi(d);
  }
}

そのほとんどは変換が簡単で、C++演算子を検索するだけです。ただし、このビット:

      for ( std::vector<int>::iterator p = primes.begin();
        p != primes.end() && *p <= n;
        ++p )

Pythonではどういう意味ですか?

4

1 に答える 1

3
for p in primes:
  if p > n:
    break
   ...

また

for p in (x for x in primes if x <= n):
   ...

前者は早く終了しますが。

于 2012-08-20T02:14:22.170 に答える