列表

详情


NC255371. 游游的因子计算

描述

游游拿到了两个正整数ab,请你告诉她a*b有哪些因子。

输入描述

两个正整数ab
1\leq a,b \leq 10^9

输出描述

第一行输出一个正整数n,代表a*b的因子数量。
第二行输出n个正整数v_i,代表a*b的所有因子,从小到大排列。

示例1

输入:

6 2

输出:

6
1 2 3 4 6 12

原站题解

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

Python3 解法, 执行用时: 964ms, 内存消耗: 9588K, 提交时间: 2023-08-12 09:55:05

a, b = map(int, input().split())

def factor(n):
    i = 1
    fs = []
    while i * i <= n:
        if n % i == 0:
            fs.append(i)
            if n // i != i:
                fs.append(n//i)
        i += 1
    return fs

factor_a = factor(a) # 求出各自的所有因子
factor_b = factor(b)
 
cnt = 0
res = set()
for ax in factor_a:
    res.add(ax)
    for bx in factor_b:
        res.add(bx)
        res.add(ax * bx)
        
res = sorted(list(res))
print(len(res))
for x in res:
    print(x, end=" ")

Python3 解法, 执行用时: 1028ms, 内存消耗: 9668K, 提交时间: 2023-08-12 09:53:49

a, b = map(int, input().split())
ans1 = []
ans2 = []
i = 1
while i * i <= a:
    if a % i == 0:
        ans1.append(i)
        if a // i != i:
            ans1.append(a // i)
    i += 1
i = 1
while i * i <= b:
    if b % i == 0:
        ans2.append(i)
        if b // i != i:
            ans2.append(b // i)
    i += 1
ans = set()
for ai in ans1:
    ans.add(ai)
    for bi in ans2:
        ans.add(bi)
        ans.add(ai * bi)
a = sorted(ans)
print(len(a))
for ai in a:
    print(ai, end=" ")

Java 解法, 执行用时: 910ms, 内存消耗: 23208K, 提交时间: 2023-08-12 09:52:13

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int a = s.nextInt();
        int b = s.nextInt();
        Set<Integer> s1 = new HashSet<>();
        Set<Integer> s2 = new HashSet<>();
        for (int i = 1; i * i <= a; i++) {
            if (a % i == 0) {
                s1.add(i);
                s1.add(a / i);
            }
        }
        for (int i = 1; i * i <= b; i++) {
            if (b % i == 0) {
                s2.add(i);
                s2.add(b / i);
            }
        }

        Set<Long> set = new TreeSet<>();
        for (int i : s1) {
            for (int j : s2) {
                set.add((long) i * j);
            }
        }

        System.out.println(set.size());
        for (long i : set) {
            System.out.print(i + " ");
        }

    }
}

上一题