[easy] 263. Ugly Number不要用篩法做!

題目請戳ugly Number
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, 8
are ugly while 14
is not ugly since it includes another prime factor 7
.
Note that 1
is typically treated as an ugly number.

正解

class Solution {
public:
    bool isUgly(int num) {
       while(num&&num%5==0) num/=5;
       while(num&&num%3==0) num/=3;
       while(num&&num%2==0) num/=2;
       return num==1;
    }
};
bool isPrime(int num)
    {
        if(num < 0) return false;
        else if(num == 1) return false;
        for(int i = 2;i<num;i++)
        {
            if(num%i == 0) return false;
        }
        return true;
    }

素數篩法(沒用)

#define Max 1000000  
bool prime[Max>>1];  
void IsPrime(){  
     memset(prime,true,sizeof(prime));  
     int n=Max>>1,m=(int)(sqrt(Max*1.0)/2.0);  
     for(int i=0;i<=m;i++)          
        if(prime[i])  
          for(int j=2*i*i+6*i+3;j<=n;j+=2*i+3)  
            prime[j]=false;  
}  

素數篩法(可以work)

#include<iostream>
using namespace std;
const long N = 200000;
long prime[N] = {0},num_prime = 0;
int isNotPrime[N] = {1, 1};
int main()
{
        for(long i = 2 ; i < N ; i ++)
        {
        if(! isNotPrime[i])
            prime[num_prime ++]=i;
        //關鍵處1
        for(long j = 0 ; j < num_prime && i * prime[j] <  N ; j ++)
            {
                isNotPrime[i * prime[j]] = 1;
            if( !(i % prime[j] ) )  //關鍵處2
                break;
        }
    }
    int num;
    while(cin>>num)
    {
        cout<<isNotPrime[num]<<endl;
    }
    return 0;
}


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容