Leetcode ☞ 263. Ugly Number ☆ 【附求质数 prime number 最大公约gcd 最小公倍lcm】
2016-03-01 16:10
567 查看
263. Ugly Number
QuestionTotal Accepted: 44350 Total
Submissions: 123594 Difficulty: Easy
Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include
2, 3, 5. For example,
6, 8are ugly while
14is
not ugly since it includes another prime factor
7.
Note that
1is typically treated
as an ugly number.
我的AC:
<span style="font-size:18px;">bool isUgly(int num) { if (num < 1) return false; for(int i = 2 ; i <= 5 ; i++){ while(num % i == 0) num /= i; } if (num == 1) return true; else return false; }</span>
分析:
将数依次除以2、3、5,除到不能整除为止,如果商不为1,说明有别的因子。
附求素数算法:
判断一个数num是否是素数,只要让num被2~根num之间的数除,如果不能被2~根num中的任何一个数整除,则num为素数。
【为何只需循环到根num? 其实想一想就明白了。 这个问题的答案又有点跟 Leetcode ☞ 319. Bulb Switcher ☆ 类似了】
bool isPrime(int num) { int k = sqrt(num); if (num == 2 || num == 3) return true; for(int i = 2 ; i <= k ; i++){ if (num % i == 0) return false;//不是素数 } return true; }
由素数又想到了 最小公倍数Lowest Common Multiple 最大公约数Greatest Common Divisor..
最小公倍数 = 两整数的乘积 ÷ 最大公约数,所以统一为求最大公约。
方法:辗转相除
非递归:
<span style="font-size:18px;">//最大公约数,非递归,辗转相除(先让a为大数再循环;把b赋给a,把余数赋给b;循环到b=0为止,)。 int gcd(int a, int b){ int tmp; if(a < b){ a = a ^ b; b = b ^ a; a = a ^ b; } while(b){ tmp = a % b; a = b; b = tmp; } return a; }</span>
递归:
<span style="font-size:18px;">//递归,ab谁大谁小无所谓。【如果a<b,第一轮就会相交换】 int gcd(int a,int b){ return a % b ? gcd(b, a % b) : b;// 或者 b ? gcd(b, a % b) : a; }</span>
相关文章推荐
- Specified VM install not found: type Standard VM, name jre7
- 开发者最常用的 8 款 Sublime Text 3 插件
- ListView通过OnScrollListener判断第一项数据或最后一项数据处于可视状态
- JavaScript知识归纳(3)
- FFT
- js函数基础、字符串函数
- 解决移动端点击事件的穿透问题之CSS3新属性:pointer-events
- 学习使用React Native的心得体会
- 最短路径算法总结(Floyd,bellmen-ford,dijkstra,Spfa)
- spring入门之ContextLoadListener
- 指针与++
- C语言实现单链表节点的删除(带头结点)
- 使用C++封装互斥锁的实践
- Android adjustpan not working after the first time
- android – 多屏幕适配相关
- JSON和XML
- Java语言 实现并归排序
- 66. Plus One
- 通过使用Byte Buddy,便捷地创建Java Agent
- Pandas之容易让人混淆的行选择和列选择