最大公约数和最小公倍数

 

int gcd(int a, int b){     // 一般要求a>=0, b>0。若a=b=0,代码也正确,返回0
    return b? gcd(b, a%b):a;
}

 

int lcm(int a, int b){ 
    return a / gcd(a, b) * b;
}

 

#include<bits/stdc++.h>
using namespace std;

int gcd(int a, int b){return b? gcd(b, a%b):a;}
int main(){
    int T , a , b;
    cin >> T;
    while(T --){
        cin >> a >> b;
        cout << gcd(a,b) << '\n';
    }
    return 0;
}
import java.util.Scanner;
public class Main{
    public static int gcd(int a, int b) {
        if(b == 0)  return a;
        else return gcd(b, a%b);
    }
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        while(T -- > 0){
          int a = in.nextInt();
          int b = in.nextInt();
          System.out.println(gcd(a, b));        
        }
    }
}
def gcd(a,b):
    if b==0:return a
    else:return gcd(b,a%b)
T = int(input())
for i in range(T):
  a,b = map(int, input().split())
  print(gcd(a,b))

 

 

#include<bits/stdc++.h>
using namespace std;
int a[100000];
int main(){
    int n;   cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n);

    int d=0;
    for(int i=1;i<n;i++)
        d = __gcd(d,a[i]-a[i-1]); //用STL的gcd函数

    if(d==0) cout<<n<<endl;
    else
        printf("%d\n",(a[n - 1] - a[0]) / d + 1);
    return 0;
}

 

 

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){ return b? gcd(b, a%b):a;}
int lcm(int a, int b){ return a / gcd(a, b) * b;}
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    int t1 = lcm(a,b);
    int t2 = lcm(a,c);
    int ans = lcm(t1,t2);
    cout<<ans<<endl;
    return 0;
}

 

 

def gcd(a,b):
    if b==0:return a
    else:return gcd(b,a%b)
fib = [0 for i in range(2030)]
fib[1] = 1
fib[2] = 1
for i in range (3,2030):
    fib[i]= fib[i-1] + fib[i-2]
ans = gcd(fib[2020],fib[520])
print(ans)

 

 

from itertools import *
def gcd(a,b):
    if b==0:return a
    else:return gcd(b,a%b)
def lcm(a, b):
    return a // gcd(a, b) * b
n = int(input())
s = [n,n-1,n-2,n-3,n-4,n-5,n-6]           #7个数
ans=0
for e in permutations(s, 3):              #选3个
    x = lcm(e[0],e[1])
    y = lcm(x,e[2])
    if  y > ans: ans = y
print(ans)

#include<bits/stdc++.h>
using namespace std;

int main(){
    long long n;      cin>>n;
    if(n%2==1)        cout<<n*(n-1)*(n-2);
    else if(n%3!=0)   cout<<n*(n-1)*(n-3);
    else                 cout<<(n-1)*(n-2)*(n-3);
    return 0;
}

 

 

#include<bits/stdc++.h>
using namespace std;
#define N 100000
int n;
int v[11];         //保存物品的体积
int c[N];          //保存物品能组成的所有体积
int gcd(int a,int b){ return b?gcd(b,a%b):a;}
int gcdAll() {        //求所有数的最大公约数
    int tmp = v[0];
    for (int i = 1; i < n; i++)   tmp = gcd(tmp, v[i]);
    return tmp;
}
int main(){
    cin >> n;
    for (int i = 0; i < n; i++)  cin >> v[i];
    if (gcdAll() == 1){      //所有数的最大公约数为1,有解
        c[0] = 1;            //背包问题
        for (int i = 0; i < n; i++)
            for (int j = v[i]; j <= N; j++)
                if (c[j - v[i]] == 1)    
                    c[j] = 1;
        for (int i = N; i >= 0; i--)  
            if (!c[i])   {
                cout<<i;
                return 0;
            }
    }
    cout<<"0";       //无限解
    return 0;
}

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b) { return b?gcd(b,a%b):a;}
int lcm(int a, int b){ return a / gcd(a, b) * b;}
int main() {
    int T; int ans;
    scanf("%d",&T);
    while(T--) {
        int a0,a1,b0,b1;
        cin >>a0>>a1>>b0>>b1;
        ans=0;
        for(int x=1;x*x <= b1;x++){
            if(b1%x == 0){        //优化
                if(gcd(x,a0)==a1 && lcm(x,b0)==b1)    ans++;
                int y = b1/x;       //另外一个因子
                if(x==y) continue;
                if(gcd(y,a0)==a1 && lcm(y,b0)==b1)    ans++;
            }
        }
        cout << ans <<endl;
    }
    return 0;
}

 

 

 

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 105;
LL x[N],a[N],b[N];
LL gcd(LL a,LL b){ return b?gcd(b,a%b):a;}

LL gcd_sub(LL a,LL b){
    if(a<b)   swap(a,b);
    if(b==1)  return a;
    return gcd_sub(b,a/b);
}
int main(){
    int n;
    while(cin>>n){
        LL cnt=0;
        for(int i=0;i<n;i++)  cin>>x[i];

        sort(x,x+n);         //排序
        for(int i=1;i<n;i++){
            // if(x[i]==x[i-1])continue;   //去掉重复的X,本题不需要
            LL d = gcd(x[i],x[0]);
            a[cnt] = x[i]/d;
            b[cnt] = x[0]/d;   //约分,得分子a / 分母b
            cnt++;
        }
        LL up = a[0], down = b[0];
        for(int i=1;i<cnt;i++){
            up= gcd_sub(up,a[i]);        //求分子
            down = gcd_sub(down,b[i]);   //求分母
        }
        cout<<up<<'/'<<down<<endl;
    }
    return 0;
}

 

def gcd(a,b):
    if b==0:return a
    else:return gcd(b,a%b)

def gcd_sub(a,b):
    if a<b: a,b = b,a
    if b==1: return a
    return gcd_sub(b,a//b);

n = int(input())
x = list(set(map(int,input().split())))  #set有去重的作用
x.sort()
n = len(x)
a=[]
b=[]
for i in range(1,n):
    d = gcd(x[i],x[0])
    a.append(x[i]//d)
    b.append(x[0]//d)

n = len(a)
up = a[0]
down = b[0]
for i in range(1,n):
    up = gcd_sub(up,a[i])
    down = gcd_sub(down,b[i])

print('%d/%d'%(up,down))
import java.util.*;
public class Main {
    static int N = 105;
    static long[] x = new long[N], a = new long[N], b = new long[N];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            for (int i = 0; i < n; ++i)
                x[i] = sc.nextLong();
            Arrays.sort(x, 0, n);
            int cnt = 0;
            for (int i = 1; i < n; ++i) {
                if (x[i] == x[i - 1])    continue;
                long d = gcd(x[0], x[i]);
                a[cnt] = x[i] / d;
                b[cnt] = x[0] / d;
                cnt++;
            }
            long up = a[0], down = b[0];
            for (int i = 1; i < cnt; ++i) {
                up = gcd_sub(up, a[i]);
                down = gcd_sub(down, b[i]);
            }
            System.out.println(up + "/" + down);
        }
    }

    private static long gcd(long a, long b) {
        if (a == 0 || b == 0)  return 0;
        return a % b == 0 ? b : gcd(b, a % b);
    }
    public static long gcd_sub(long a, long b) {
        if (a == b)  return a;
        return a > b ? gcd_sub(b, a / b) : gcd_sub(b, a);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值