假设已知两个圆周运动的物体的周期分别是a ,b, 设每隔时间t就会在同一条直线上
那么就有方程 (2PI/a - 2PI/b)* t=PI 所以就有 t=ab/(2|a-b|);
如果有多个物体, 就会有多个t值,所以每隔 所有 t值的最小公倍数的时间所有的物体就会在同一直线上!
另外:如果分数的分子分别是 a1, a2, ...., 和 b1, b2, ....
那么所有分数的最小公倍数就是lcm(a1, a2, ...)/gcd(b1, b2,....);
令p[i]存储素数,将a1,a2,...分别整除以p[i],直到除尽!并记录除以每个p[i]时的个数temp;
并更新该个数的最大值cnt[i]=max(temp, cnt[i]);
最后cnt[i]个p[i]分别相乘得到最终的结果就是所有数的最小公倍数!
for(LL j=0; j<cnt[i]; ++j){
for(LL k=0; k<=endx; ++k){
for(j=0; j<top && i*p[j]<M; ++j){
for(LL i=0; i<top && p[i]<=k; ++i){
while(scanf("%lld", &n)!=EOF){
memset(cnt, 0, sizeof(cnt));
LL tmp=q[0]-q[i]>0 ? q[0]-q[i] : q[i]-q[0];
LL GCD=gcd(tmp, q[0]*q[i]);
printf("%lld", ans[endx]);
for(int i=endx-1; i>=0; --i)
printf("%04lld", ans[i]);
import java.util.Scanner;
import java.io.BufferedInputStream;
static int[] tt = new int[1005];
static boolean[] flag = new boolean[10005];
static int[] p = new int[10005];
static int[] q = new int[10005];
static int[] aa = new int[10005];
public static void isprime(){
Arrays.fill(flag, false);
for(j=0; j<top && i*p[j]<=10000; ++j){
public static void solve(int k){
for(i=0; i<=top && p[i]<=k; ++i){
public static int gcd(int a, int b){
public static void main(String[] args){
Scanner input = new Scanner(new BufferedInputStream(System.in));
int temp=Math.abs(q[0]-q[i]);
int GCD=gcd(temp, q[0]*q[i]);
BigInteger bigN = BigInteger.ONE;
for(int i=0; i<=top; ++i){
for(int j=0; j<aa[i]; ++j)
bigN=bigN.multiply(BigInteger.valueOf(p[i]));
for(int i=0; i<=top; ++i)
System.out.println(p[i]+" "+aa[i]);
bigN=bigN.divide(BigInteger.valueOf(2));
System.out.println(bigN+" "+ans);