[英]there's a problem when dealing with prime factorization
我已經完成了這個練習,它是關於找出一個數字是否“丑陋” 。 如果一個數字只有 2、3 或 5 作為因數,那么它就是丑陋的。 否則,它並不難看。
這是我的解決方案:
include <stdbool.h>
#include <math.h>
bool is_prime(unsigned int num) {
bool result = false;
for (unsigned int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
result = false;
}
else {
result = true;
}
}
return result;
}
bool is_ugly(unsigned int num) {
bool result = false;
for (unsigned int i = 1; i <= num; i++) {
if (num % i == 0) {
if (is_prime(i)) {
if (i != 2 || i != 3 || i != 5) {
result = false;
break;
}
else {
result = true;
break;
}
}
}
}
return result;
}
int main(void) {
bool result = is_ugly(30); // it must return true;
return 0;
}
is_ugly function 的工作方式如下:
你的方法太復雜了。
您只需要檢查一個數字是否僅包含除數 2、3 和 5。
所以 function is_prime
只是多余的。 此外,它有一個錯誤,因為對於數字 2,它返回 false。
function is_ugly 可以看起來很簡單。 例如
bool is_ugly( unsigned int n )
{
if ( n != 0 )
{
n = max_divide( n, 2 );
n = max_divide( n, 3 );
n = max_divide( n, 5 );
}
return n == 1'
}
依次調用的 function max_divide 可以看如下方式
unsigned int max_divide( unsigned int n, unsigned int divisor )
{
if ( n != 0 )
{
while ( n % divisor == 0 )
{
n /= divisor;
}
}
return n;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.