程序4---分解质因数
来源:互联网 发布:大数据公司排名 编辑:程序博客网 时间:2024/06/05 14:59
分解质因数就是将一个合数分解成几个质数(也叫素数)的乘积的形式。
如:6=2*3
第一种实现
基本思路:
从i=2到sqrt(n),遍历,如果n%i==0,则表示i是n的一个因子,然后再看这个i是不是素数(即质数),如果是,则打印,并使n = n/i。然后i再从2开始。
bool isPrime(int m){ int sqr = sqrt(m); for(int i=2; i <= sqr; i++) { if(m%i == 0) return false; } return true;}void foo(int n){ for(i=2; i <= sqrt(n); i++) { if(n%i == 0) { if(isPrime(i)) { print("%d ", i); n = n / i; i = 1; //到了下次循环,就是2了。 } }//if(n % i == 0) } printf("%d", n);}
第二种实现,优化
第一种实现,代码写的太复杂。
(1)由于从2开始整除的,没有必要判断被n整除的这个数是不是质数,这个数必然是质数。
(2)没有必要每次都从2开始。因为,已经从2开始过了,如果上一次循环时,n都不能被2整除,则后面的肯定不会被2整除。
#include <stdio.h>#include <math.h>void foo(long long int n){ long long int sqr = sqrt(n); long long int i = 0; for(i = 2; i <= sqr; i++) { if(n % i == 0 && (n /= i)) { printf("%lld ", i--); } } if(n != 1) { printf("%lld", n); } printf("\n");}int main(){ long long int n = 9223372036854; scanf("%lld", &n); foo(n); return 0;}
这个时间显然无法接受啊。
0 0
- 程序4---分解质因数
- 质因数分解程序
- 分解质因数程序(C++)
- 程序14--正整数分解质因数
- 【笔试】4、正整数分解质因数
- 【程序14】将一个正整数分解质因数
- 经典c程序(0015)---正整数分解质因数
- Java小程序:正整数分解质因数
- 分解质因数
- 分解质因数
- 质因数分解
- 分解质因数
- 质因数分解
- 分解质因数
- 分解质因数
- 质因数分解
- 分解质因数
- 分解质因数
- LeetCode 13 Roman to Integer(罗马数到整型数)
- 17.2.2.2 Slave Status Logs
- linux shell — 4.文件和目录管理(1)
- android 字符串截取
- 关于编译性语言、解释性语言和脚本语言的区别
- 程序4---分解质因数
- opencv点目标追踪
- 退到无路可退时,再退一步,以发起反击。这就是给自己要留出最后一步的理由。
- textfield的leftview不能重复
- 隐马尔可夫模型(HMM)攻略
- Adnroid:values/strings.xml报错:" error: Apostrophe not preceded by \..."
- BlockingQueue的使用
- linux小命令集合
- 正规的Handler写法