注册 登录
编程论坛 C++教室

gcd问题怎么解?

问题行家 发布于 2021-11-28 11:30, 967 次点击
题目描述
两个长度为n(n<=1e5)数组a,b,

对于每个i,输出gcd(a[1]*b[i],a[2]*b[i],...,a[n]*b[i]);

输入描述:
第一行输入n
第二行输入连续的n个数字,为a数组
第三行输入连续的n个数字,为b数组
(n<=1e5,1<=ai,bi<=1e9)
输出描述:
输出n行,每行一个数字
示例1
输入
复制
3
6 10 12
3 10 5
输出
复制
6
20
10
备注:
 gcd是最大公因子,指两个或多个整数共有约数中最大的一个。eg:gcd(21,36)=3
 
 gcd的java求法:
 
 
static int gcd(int x,int y){
if(y==0)return x;
return gcd(y,x%y);
}
1 回复
#2
rjsp2021-11-28 16:21
程序代码:
#include <iostream>
#include <numeric>
using namespace std;

int main( void )
{
    size_t n;
    cin >> n;

    unsigned result = 0;
    for( size_t i=0; i!=n; ++i )
    {
        unsigned ai;
        cin >> ai;
        result = gcd( result, ai );
    }

    for( size_t i=0; i!=n; ++i )
    {
        unsigned bi;
        cin >> bi;
        cout << result*bi << '\n';
    }
}
1