列表

详情


NC205351. 公因子

描述

牛妹是一个喜欢公因子的女孩子。
定义 n 个整数 为最大的正整数 p 满足对于所有 ,p 整除 a_i
牛妹有一个长度为 n 的整数序列 。她希望能求出一个非负整数 x,使得 最大。
牛妹不满足于只求出这个最大的 ,所以她希望你还能帮她求出在满足 最大时最小的 x。

输入描述

第一行一个整数 ,表示牛妹的序列长度。
第二行 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)

上一题