在codewars中,有一个质因数分解题:
https://www.codewars.com/kata/primes-in-numbers/train/rust

比如,有一个数,86240,我们可以分解如下:
86240=2 x 2 x 2 x 2 x 2 x 5 x 7 x 7 x 11
请写一个输出如此格式:(2**5)(5)(7**2)(11)。

一、我的代码

fn prime_factors(n: i64) -> String {// your codeif is_prime(n){return format_print(vec![n]);}let mut m = n;let mut output: Vec<i64> = Vec::new();for i in 2..n + 1 {if !is_prime(i) {continue;}while m % i == 0i64 {output.push(i);m = m / i;}if m < i {break;}}println!("output:{:?}", output);format_print(output)
}fn is_prime(n: i64) -> bool {   match n<=1{true =>return false,_=>return !(2..n).any(|x| n % x == 0),}
}
fn format_print(v: Vec<i64>) -> String {let len = v.len();let mut strs = "".to_string();let mut repeat_n = 1;for i in 0..len {if i != 0 {if &v[i] == &v[i - 1] {repeat_n += 1;} else {match repeat_n {1 => strs.push_str(&format!("({})", &v[i - 1])),_ => strs.push_str(&format!("({}**{})", &v[i - 1], repeat_n)),};repeat_n = 1;if i == len - 1 {strs.push_str(&format!("({})", &v[i]));}}}}strs
}

调试运行:

fn main() {let st = SystemTime::now();println!("7919=>{}", prime_factors(7919));println!("1=>{}", prime_factors(862400));println!("2=>{}", prime_factors(7775460));println!("3=>{}", prime_factors(17 * 17 * 93 * 677));let mt1 = SystemTime::now();println!("is_fit_num time:{:?}", mt1.duration_since(st).unwrap());thread::sleep_ms(500000);
}

结果输出以及用时:

7919=>(7919)
output:[2, 2, 2, 2, 2, 2, 5, 5, 7, 7, 11]
1=>(2**6)(5**2)(7**2)(11)
output:[2, 2, 3, 3, 3, 5, 7, 11, 11, 17]
2=>(2**2)(3**3)(5)(7)(11**2)(17)
output:[3, 17, 17, 31, 677]
3=>(3)(17**2)(31)(677)
is_fit_num time:Duration { secs: 0, nanos: 1003300 }

通过了相关测试,但由于codewars认为用时过长(要求在12秒以内运行结束),无法接受codewars的提交。接下来还需优化。

原因是,弄个大数,上面的程序就会挂(用时过长),比如:

println!("987654321 =>{}", prime_factors(987654321));//估计要40秒

二、其他精彩的解法

这个需等我过关了,才能知道…….

Rust: codewars的primes-in-numbers相关推荐

  1. 《Java8实战》笔记(14):函数式编程的技巧

    函数式编程的技巧 无处不在的函数 术语"函数式编程"意指函数或者方法的行为应该像"数学函数"一样-- 没有任何副作用. 对于使用函数式语言的程序员而言,这个术语 ...

  2. Eureqa Formulize从实验数据中自动筛选函数关系的symbolic regression符号回归软件

    各种操作系统,试用30天版本下载:点击打开链接 Free 30 day trial of Eureqa® Desktop Latest Version: 1.24.0 (September 27, 2 ...

  3. 世界读书日:带你走近Go语言编程思维

    经过十几年的演化和发展,Go语言在全世界范围内已经拥有了百万级别的拥趸,在这些开发者当中,除了一部分新入行的编程语言初学者之外,更多的是从其他编程语言阵营转过来的开发者.由于Go语言上手容易,在转Go ...

  4. 排序算法——快速排序【代码实现】

    伪代码 function quicksort(array)less, equal, greater := three empty arraysif length(array) > 1 pivot ...

  5. LeetCode002-两数相加(Add Two Numbers)-Rust语言实现

    题目 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序 的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...

  6. CodeForce 237C Primes on Interval(二分+ 素数筛法)

    题目链接:http://codeforces.com/problemset/problem/237/C Primes on Interval time limit per test 1 second ...

  7. 204. Count Primes

    Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Output: 4 E ...

  8. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

    rust 编程入门 Rust has been voted Stack Overflow's most loved programming language for five years in a r ...

  9. 【CodeForces - 1150C】Prefix Sum Primes(思维)

    题干: We're giving away nice huge bags containing number tiles! A bag we want to present to you contai ...

  10. 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)

    题干: Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are ...

最新文章

  1. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
  2. 无法检查指定的位置是否位于cfs上_(干货分享)一文搞明白 节气门位置传感器的作用、故障类型与症状、诊断方法...
  3. Apache Cordova介绍
  4. Windows中查找命令的路径 (类似Linux中的which命令)
  5. 树莓派 USB摄像头 实现网络监控
  6. 面经手册 · 第16篇《码农会锁,ReentrantLock之公平锁讲解和实现》
  7. Google IPV6 地址
  8. 解决问题:ImportError: The 'enchant' C library was not found. Please install it via your OS package manag
  9. 2017招商银行笔试01
  10. python运用ico图标_使用python将图片格式转换为ico格式的示例
  11. const的小把戏。
  12. LZW压缩算法(数据无损压缩)
  13. c语言 按键切换显示屏,51单片机lcd1602按键切屏
  14. Oracle 表空间时点恢复(TSPITR)
  15. 人工神经元网络及其应用,人工神经元网络技术
  16. ceph报“mon node3 is low on available space”
  17. 计算机论文原文+翻译
  18. 博客推荐系列第一篇:我收藏的BLOG分类
  19. 多相滤波 信道化接收机 matlab程序,基于复多相滤波器组的信道化接收机
  20. 如何用PDCA做过程管理

热门文章

  1. 【svn】SSL error: A TLS warning alert has been received的解决方法
  2. VB.NET rdlc 报表的使用
  3. Mootools 1.4 官方网站的API使用说明存在错误
  4. 有关编辑距离计算的一点整理。
  5. Maven-Eclipse使用maven创建HelloWorld Java项目,使用Junit-4.11的注解
  6. 容器云未来:Kubernetes、Istio 和 Knative
  7. 【批处理学习笔记】第九课:批处理符号(2)
  8. java中session对象及其常用方法
  9. net异步线程获取返回值的三种方式
  10. MySQL性能优化的最佳20+套经验