试除法求约数
创始人
2025-05-28 03:37:33
0

试除法求约数

      • 一、思路
            • (1)初始思路
            • (2)优化思路(时间复杂度降低为O(√n))
      • 二、例题
            • (1)题目
            • (2)输入格式
            • (3)输出格式
            • (4)代码(Java)

一、思路

假设要求n的所有约数

(1)初始思路
  • 从前往后将所有小于等于n的数都枚举一遍,如果n可以被枚举到的数整除,那这个数就是n的约数
(2)优化思路(时间复杂度降低为O(√n))
  • 没有必要从前往后将所有小于等于n的数都枚举一遍
  • 如果d是n的约数,则n/d必然也是n的约数(例如:12%3=0,12%4=0,12/3=4,则3和4都是12的约数)
  • 可见约数都是成对出现的
  • 故没有必要从前往后将所有小于等于n的数都枚举一遍
  • 只需要将一对约数中较小的一个枚举出来,n除以较小的一个约数得到的自然就是较大的那个约数
  • 枚举就可以从[1,n]缩减至[1,n/d]
  • 但要注意一点:当n/d=d时,即一对约数是相同的数时,两个相同的约数会被重复录入(例如4*4=16,两个4会被当做两个不同的约数录入两次),而我们不希望出现这种重复
  • 所以在录入较大的那个约数时需要进行一下判断,这个较大的约数和较小的约数是否相同,如果相同就不再重复录入

二、例题

(1)题目
  • 给定n个正整数ai,对于每个整数ai,请你按照从小到大的顺序输出它的所有约数。
(2)输入格式
  • 第一行包含整数n。
  • 接下来n行每行包含一个整数ai
(3)输出格式
  • 输出共n行。其中第i行输出第i个整数ai的所有约数。
(4)代码(Java)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] b = new int[n];for (int i = 0; i < n; i++) {b[i] = sc.nextInt();}for (int i = 0; i < n; i++) {ArrayList a = get_divisors(b[i]);for (int j = 0;j < a.size(); j++) {System.out.print(a.get(j) + " ");}System.out.println();}}//求约数public static ArrayList get_divisors(int n) {ArrayList a = new ArrayList<>();for (int i = 1; i <= n/i; i++) {if (n % i == 0){a.add(i);}//注意边界,避免重复:当n是i的平方时,若不加约束条件可能会重复录入//例如:当n=16 i=4时,若不加n/i!=i的条件,4就会被录入两次if (n/i != i){a.add(n/i);}}Collections.sort(a);//最后排序一下再输出return a;}
}

在这里插入图片描述

相关内容

热门资讯

手机系统flyme是安卓系统吗... 你有没有想过,你的手机里那个飞快如风的系统,Flyme,它是不是安卓的“好兄弟”呢?今天,就让我带你...
安卓os系统怎么使用,Andr... 你手里那台安卓手机是不是总感觉有点儿复杂,不知道怎么玩转呢?别急,今天就来给你详细介绍一下安卓OS系...
安卓怎么装旧系统,安卓设备如何... 你有没有想过,手机用久了,系统更新换代,新功能层出不穷,但有时候,那些旧系统里的经典操作和熟悉感,简...
电脑怎装安卓系统,轻松实现多系... 你有没有想过,你的电脑除了装Windows系统,还能装上安卓系统呢?没错,就是那个让你手机不离手的安...
安卓系统找不到软件,探寻解决方... 最近是不是你也遇到了这样的烦恼:手机里明明有安卓系统,却怎么也找不到心仪的软件?别急,今天就来给你详...
小米独立系统取代安卓,迈向自主... 小米独立系统:小米与安卓的较量在科技领域,每一次系统的更新换代都牵动着无数科技爱好者和行业从业者的目...
安卓系统会员价格,性价比与权益... 你有没有发现,最近手机上的安卓系统会员价格又涨了?这可真是让人有点头疼呢!咱们一起来聊聊这个话题,看...
安卓点歌系统怎么点歌,享受音乐... 你有没有想过,在安卓手机上点歌竟然也能这么有趣呢?没错,现在就让我带你一起探索安卓点歌系统的奥秘吧!...
w222安卓系统,功能解析与使... 你有没有发现,最近你的手机是不是变得越来越流畅了?没错,我要说的就是那款备受瞩目的W222安卓系统!...
iphone手机使用安卓系统,... 你有没有想过,如果有一天你的iPhone手机突然变成了安卓系统,会是怎样的场景呢?想象那熟悉的苹果界...
安卓系统珠宝手绘软件,艺术与科... 你有没有想过,手机上那些精美的珠宝手绘作品是怎么诞生的呢?其实,这一切都离不开安卓系统上一款神奇的应...
安卓系统app签名方案,安全与... 你有没有想过,为什么你的手机上那么多应用都能无缝运行?这其中,安卓系统app签名方案可是功不可没哦!...
安卓系统关闭应用存储,释放手机... 手机里的应用越来越多,存储空间越来越紧张,是不是感觉手机像是个装满杂物的仓库?别急,今天就来教你怎么...
安卓系统的占比,引领移动设备市... 你知道吗?在智能手机的世界里,有一个系统可是占据了半壁江山,那就是安卓系统!想象你手中的手机,是不是...
在线安卓翻译系统实现,便捷跨语... 你有没有想过,在这个信息爆炸的时代,语言不再是沟通的障碍?没错,我要说的是,在线安卓翻译系统正在悄悄...
安卓系统适配键盘丝印,打造个性... 你有没有发现,用安卓手机打字的时候,有时候键盘上的字母会变得模糊不清,甚至有时候还会出现错别字呢?这...
车载安装安卓系统教程,轻松实现... 你有没有想过给你的爱车来个“大变身”?没错,就是给车载系统来个升级,让它从那个老旧的界面跳脱出来,变...
原生安卓系统6.0精简,极致体... 亲爱的手机控们,你是否曾为手机系统臃肿、运行缓慢而烦恼?今天,就让我带你一探究竟,揭秘原生安卓系统6...
安卓系统与嵌入式系统,安卓系统... 你知道吗?在科技的世界里,有一种系统,它就像是个万能的魔法师,既能掌控手机、平板,又能深入到各种智能...
风驰软件安卓系统行吗,引领智能... 你有没有想过,手机上的软件是不是也能像风一样自由驰骋呢?今天,咱们就来聊聊这个话题——风驰软件在安卓...