⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 primroot.cc

📁 the FXT library: fast transforms and low level algorithms. The package contains many algorithms for
💻 CC
字号:
#include "mod.h"#include "modm.h"#include "factor.h"//#include "jjassert.h"intis_primitive_root_mod(umod_t r, umod_t m, const factorization &pf)//// tests whether r is a primitive root//// r is a primitive root of m  <==>// r^((m-1)/a)!=1 for all prime factors a of m-1//{    cout << "\n\n  is_primitive_root():  testing r=" << r << endl;    umod_t h = m-1;  // cardinality    cout << "\n  is_primitive_root():  cardinality h=" << h << endl;    for (int i=0; i<pf.npr; i++)    {        umod_t v = pf.prime[i];        umod_t x = pow_mod(r,h/v,m);//        cout << "\n(mod::phi-1)=" << (mod::phi-1) << endl;//      cout << " test for prime[" << i << "]= " << v//           << " (ex=" << h/v << ")"//           << " gave:" << x//           << endl;        if ( x==1 )  return 0;  // r is not a primitive root    }    return 1;  // all factors tested, r is a primitive root}// -------------------------umod_tprimitive_root_mod(umod_t m, const factorization &pf)//// finds a primitive root mod m//{    if ( m==2 )  return 1;    if ( m==4 )  return 3;    umod_t x;    // first search small primes:    int i = 0;    while ( 0!=(x=prime(i)) )    {        if ( x>=m )  break;        i++;//        if ( mod::modfact.exponent(x) )  continue;        if ( is_primitive_root_mod(x,m,pf) )  return x;    }    // (rarely ever reached)    while (  ++x<m )    {//        if ( gcd(mod::modulus,x)!=1 )  continue;        if ( is_primitive_root_mod(x,m,pf) )  return x;    }    jjassert2( 0, "primitive_root_mod() failed." );    return 0;}// -------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -