当前位置:网站首页>Kotlin算法入门计算质因数
Kotlin算法入门计算质因数
2022-08-11 08:01:00 【易庞宙】
/* 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。 比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。 现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身 */ class QualityFactor { /** * 因为不管怎么计算由于非素数数都可以通过1·9中通过乘计算得出所以除了1和2只需要继续是否可以被2-9整除就可以 * 这一说法利用了提取最小公因式来计算得出 * 当然要避免一个重要问题就是当它是个位数字的时候也就是1 、 2 、 3 、 5 、7的时候直接返回 * 这样计算的好处在于避免了传统递归从1到n的反复计算更加高效的计算出素数面对千位以上的数据使用 * 也避免了过多使用这一算法(冗余重复性计算)的: * 判断素数的方法:用一个数分别去除2到sqrt(这个数的平方根),如果能被整除, 则表明此数不是素数,反之是素数这一种算法更加快捷 * 避免了重复计算的冗余 */ fun isPrimeNumber(divisor: Int, number: Int): Boolean { if (number % divisor == 0) return false else if (number == 1 || number == 2 || number == 3 || number == 5 || number == 7 || number == 11 || number == 13 || number == 17 || number == 19) return true else if (number <= 20) return false else if (divisor == 9) { return isPrimeNumber(11, divisor) } else if (divisor > 9) { return if (divisor < Math.sqrt(number.toDouble())) { isPrimeNumber(divisor + 1, number) } else if (divisor.toDouble() == Math.sqrt(number.toDouble())) false else true } return isPrimeNumber(divisor + 1, number) } fun getQualityFactor(number: Int) { var number = number var out = number.toString() + "=" if (isPrimeNumber(2, number)) out = out + number else { while (number != 1) { for (j in 2..number) { /*如果每一次Number都能整除j则让Number/=j*/ if (number % j == 0) { number /= j /*整除完判断是否是素数这样就避免了最后剩下一个比较大的素数然后还要进行计算重复计算*/ if (number != 1) { out += j.toString() + "x" if (isPrimeNumber(2, number)) { out += number number = 1 } } else out += j break } } } } println(out) } }
边栏推荐
- 4.1-支持向量机
- 《剑指offer》题解——week3(持续更新)
- 剑指offer专项突击版第26天
- Redis 只会用缓存?20种妙用让同事直呼牛X(荣耀典藏版)
- C Primer Plus(6) 中文版 第1章 初识C语言 1.7 使用C语言的7个步骤
- 软件测试常用工具的用途及优缺点比较(详细)
- 无服务器+域名也能搭建个人博客?真的,而且很快
- Use tf.argmax in Tensorflow to return the index of the maximum value of the tensor along the specified dimension
- 1081 检查密码 (15 分)
- Keep track of your monthly income and expenses through bookkeeping
猜你喜欢
随机推荐
关于架构的认知
项目1-PM2.5预测
Evolution and New Choice of Streaming Structured Data Computing Language
C Primer Plus(6) 中文版 第1章 初识C语言 1.7 使用C语言的7个步骤
2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹
C语言-结构体
数据库无法启动,报无法分配内存,怎么处理
Four states of Activity
Interaction of Pico neo3 in Unity
1106 2019 Sequence (15 points)
Item 2 - Annual Income Judgment
支持各种文件快速重命名最简单的小技巧
Redis source code-String: Redis String command, Redis String storage principle, three encoding types of Redis string, Redis String SDS source code analysis, Redis String application scenarios
Active users of mobile banking grew rapidly in June, hitting a half-year high
string类接口介绍及应用
剑指offer专项突击版第26天
1091 N-自守数 (15 分)
1091 N-Defensive Number (15 points)
go 操作MySQL之mysql包
零基础SQL教程: 主键、外键和索引 04