列表

详情


NC19842. 约数

描述

Actci上课睡了一觉,下课屁颠屁颠的去找数学老师补课,问了老师一个题目:
    给出两个数a,b,问a和b的全部公约数是什么?
数学老师一看这道题太简单了,不屑回答,于是就交给了你。

输入描述

一行两个数a,b.

输出描述

a和b的全部公约数,每个数字之间空格隔开。

示例1

输入:

25 37

输出:

1

示例2

输入:

25 100

输出:

1 5 25

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 504K, 提交时间: 2018-12-22 19:10:12

#include <bits/stdc++.h>
using namespace std;
long long g[100000000];
int main()
{
	long long a,b,i,cnt=0;
	cin>>a>>b;
	for(i=1;i<=sqrt(a);i++)
	{
		if(a%i==0&&b%i==0) g[cnt++]=i;
		if(a%i==0&&b%(a/i)==0&&i!=a/i) g[cnt++]=a/i;
	}
	sort(g,g+cnt);
	for(i=0;i<cnt;i++) cout<<g[i]<<" ";
	cout<<endl;
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 1611ms, 内存消耗: 4636K, 提交时间: 2019-12-31 23:33:22

def findyue(n):
    i = 2
    out = [1,n]
    while i**2<=n:
        if n%i==0:
            out.append(i)
            out.append(n//i)
        i+=1
    return out
a,b = map(int,input().split())
alst = set(findyue(a))
blst = set(findyue(b))
c = list(alst&blst)
c.sort()
print(' '.join(map(str,c)))

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2020-09-12 20:42:03

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
set<ll>st1;
int main()
{
	ll a,b; cin >> a >> b;
	ll x = __gcd(a,b);
	for(ll i=1; i*i<=x; i++)
	{
		if( x%i==0 ) st1.insert(i),st1.insert(x/i);
	}
	for(auto i:st1) cout << i << " ";
	return 0;
}


上一题