NC19842. 约数
描述
输入描述
一行两个数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; }