1 条题解
-
0
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
- 上传者