mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
3845accd4b
3600-3699
121 lines
2.5 KiB
C++
121 lines
2.5 KiB
C++
#include<stdio.h>
|
|
#include<string.h>
|
|
#include<math.h>
|
|
#include<algorithm>
|
|
#define LL __int64
|
|
const int N = 1e9;
|
|
using namespace std;
|
|
int r, d[10005], n[40], pr[10005], qpr[10005], tq;
|
|
void Pr()
|
|
{
|
|
int i, j;
|
|
memset( pr, 1, sizeof(pr) );
|
|
pr[1] = 0;
|
|
for( i = 2; i <= 10000; i ++ )
|
|
if( pr[i] )
|
|
{
|
|
j = i+i;
|
|
while( j <= 10000 )
|
|
{
|
|
pr[j] = 0;
|
|
j += i;
|
|
}
|
|
qpr[tq++] = i;
|
|
}
|
|
}
|
|
int Gcd( int a, int b )
|
|
{
|
|
if( !b )
|
|
return a;
|
|
else
|
|
return Gcd( b, a%b );
|
|
}
|
|
void Op()
|
|
{
|
|
memset( d, 0, sizeof(d) );
|
|
int t, i, j, tt;
|
|
for( j = 0; j < r; j ++ )
|
|
{
|
|
t = n[j];
|
|
for( i = 0; i < tq && t > 1; i ++ )
|
|
if( !( t % qpr[i] ) )
|
|
{
|
|
tt = 1;
|
|
t/=qpr[i];
|
|
while( !( t%qpr[i] ) )
|
|
{
|
|
tt ++;
|
|
t/=qpr[i];
|
|
}
|
|
d[ qpr[i] ] = d[ qpr[i] ] > tt ? d[ qpr[i] ] : tt;
|
|
}
|
|
}
|
|
}
|
|
int main()
|
|
{
|
|
int i, j, k, ti, qu[10004], top, na, mu[30];
|
|
LL qa[30], t, ans;
|
|
Pr();
|
|
while( ~scanf( "%d", &r ) )
|
|
{
|
|
for( i = 0; i < r; i ++ )
|
|
{
|
|
scanf( "%d%d", n+i, &k );
|
|
k = Gcd( n[i], k );
|
|
n[i] /= k;
|
|
}
|
|
Op();
|
|
ans = 1;
|
|
top = 0;
|
|
for( i = 0; i < tq; i ++ )
|
|
if( d[ qpr[i] ] > 0)
|
|
{
|
|
ans *= d[ qpr[i] ]+1;
|
|
qu[ top++ ] = qpr[i];
|
|
}
|
|
if( top > 0 && qu[0] == 2 )
|
|
na = 2;
|
|
else
|
|
na = 1;
|
|
printf( "%I64d\n", ans-na );
|
|
ans = ans < 16+na ? ans : 16+na;
|
|
qa[0] = 1;
|
|
mu[0] = 0;
|
|
for( k = 1; k < ans; k ++ )
|
|
{
|
|
t = N*(LL)N;
|
|
for( i = 0; i < k; i ++ )
|
|
if( mu[i] < top && qu[ mu[i] ] * qa[i] < t )
|
|
t = qu[ mu[i] ]*qa[i];
|
|
qa[k] = t;
|
|
mu[k] = -1;
|
|
for( j = 0; j <= k; j ++ )
|
|
if( mu[j] < 0 || ( mu[j] < top && qu[ mu[j] ] * qa[j] == qa[k] ) )
|
|
{
|
|
for( i = mu[j]+1; i < top; i ++ )
|
|
{
|
|
ti = 0;
|
|
t = qa[j];
|
|
while( !( t % qu[i] ) )
|
|
{
|
|
ti ++;
|
|
t /= qu[i];
|
|
}
|
|
if( ti < d[ qu[i] ] )
|
|
break;
|
|
}
|
|
mu[j] = i;
|
|
}
|
|
}
|
|
if( na < ans )
|
|
{
|
|
printf( "%I64d", qa[na] );
|
|
na ++;
|
|
for( j = 1; na < ans && j < 16; na ++, j ++ )
|
|
printf( " %I64d", qa[na] );
|
|
printf( "\n" );
|
|
}
|
|
}
|
|
return 0;
|
|
}
|