NC205351. 公因子
描述
输入描述
第一行一个整数 ,表示牛妹的序列长度。
第二行 n 个整数 ,表示牛妹的序列。
输入保证存在最大的 。
输出描述
输出一行两个整数,分别表示最大的 和满足 最大时最小的 x。
示例1
输入:
3 -3 1 3
输出:
2 1
C++11(clang++ 3.9) 解法, 执行用时: 339ms, 内存消耗: 8288K, 提交时间: 2020-06-28 20:50:32
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; ll n,a[N],g; int main(){ scanf("%lld",&n); for(ll i=0;i<n;i++) scanf("%lld",&a[i]); for(ll i=1;i<n;i++) g=__gcd(g,a[i]-a[i-1]); g=abs(g); cout<<(g)<<" "<<(g-a[0]%g)%g<<endl; return 0; }
C++14(g++5.4) 解法, 执行用时: 258ms, 内存消耗: 8412K, 提交时间: 2020-06-28 20:38:11
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; ll n,a[N],g; int main(){ scanf("%lld",&n); for(ll i=0;i<n;i++) scanf("%lld",&a[i]); for(ll i=1;i<n;i++) g=__gcd(g,a[i]-a[i-1]); g=abs(g); cout<<(g)<<" "<<(g-a[0]%g)%g<<endl; return 0; }
pypy3(pypy3.6.1) 解法, 执行用时: 1515ms, 内存消耗: 146712K, 提交时间: 2020-06-26 19:33:55
from math import gcd n = int(input()) a = sorted(map(int, input().split())) u = 0 for i in range(n - 1): u = gcd(u, a[i + 1] - a[i]) w = -(-a[0] // u) * u print(u, w - a[0])
Python3(3.5.2) 解法, 执行用时: 829ms, 内存消耗: 152716K, 提交时间: 2020-07-05 04:49:08
import math n=int(input()) nums=list(map(int,input().split())) b=[] x=0 b=0 for i in range(1,n): b=math.gcd(b,nums[i]-nums[i-1]) x=(b-nums[1])%b print(b,x)