[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;
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容