1 条题解

  • 0
    @ 2025-4-14 18:41:37

    C++ :

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    #define max( a, b ) ( (a) > (b) ? (a) : (b) )
    #define min( a, b ) ( (a) < (b) ? (a) : (b) )
    #define llint long long
    #define endl '\n'
    #define WS ' '
    
    int n; // 2 <= n <= 10
    #define N 12
    int a[N]; // 2 <= a[i] <= 10 ^ 5
    int m[N]; // 2 <= m[i] <= 10 ^ 3
    
    // find: lcm( a[1] ^ m[1], a[2] ^ m[2], ... , a[n] ^ m[n] ) % (10 ^ 9 + 7)
    
    #define MAXA 100010
    bool ip[MAXA];
    llint pr[MAXA >> 1], nop;
    
    void init_ip() {
      memset( ip, true, sizeof(ip) );
      ip[0] = ip[1] = false; nop = 0;
      for( llint i = 2; i < MAXA; i ++ ) {
        if( ip[i] ) {
          pr[nop ++] = i;
          for( llint j = i * i; j < MAXA; j += i ) {
            ip[j] = false;
          }
        }
      }
    }
    
    llint po[MAXA >> 1];
    void divide( int n, int power ) {
      for( int i = 0; pr[i] <= n && i < nop; i ++ ) {
        if( n % pr[i] == 0 ) {
          int k = 0;
          while( n % pr[i] == 0 ) {
            n /= pr[i];
            k ++;
          }
          po[i] = max( po[i], k * power );
        }
      }
    }
    
    #define mod 1000000007
    llint modpow( llint a, llint p ) {
      llint ret = 1LL;
      for( ; p; p >>= 1 ) {
        if( p & 1 ) ret = ret * a % mod;
        a = a * a % mod;
      }
      return ret;
    }
    
    int main() {
      //freopen( "F.txt", "r", stdin );
      //freopen( "_F.txt", "w", stdout );
      init_ip();
      while( ~scanf( "%d", &n ) ) {
        for( int i = 0; i < n; i ++ ) {
          scanf( "%d", &m[i] );
        }
        memset( po, 0, sizeof( po ) );
        for( int i = 0; i < n; i ++ ) {
          scanf( "%d", &a[i] );
          divide( a[i], m[i] );
        }
        llint ans = 1;
        for( int i = 0; i < nop; i ++ ) {
          if( po[i] ) {
            //cout << pr[i] << WS << po[i] << endl;
            ans = ans * modpow( pr[i], po[i] ) % mod;
          }
        }
        cout << ans << endl;
      }
      return 0;
    }
    
    • 1

    信息

    ID
    3076
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者