1. 程式人生 > 資訊 >時間膨脹是真實存在的,你的頭比腳老得更快

時間膨脹是真實存在的,你的頭比腳老得更快

判斷是否為素數(一般方法):

時間複雜度O(sqrt(n))

//1
bool Find_prime(int n)
{
    if(n<=1) return false;//特判
    else{
        for(long long i=2;i*i<=n;i++){//開longlong防止i*i溢位 
            if(n%i==0) return false;
        }
        return true;
    } 
}

//2
bool Find_prime(int n)
{
    int m=sqrt(1.0*n);
    if(n<=1
) return false;//特判 for(int i=2;i<=m;i++){ if(n%i==0) return false; } return true; }
View Code

 

素數表的獲取:

1.一般方法:範圍在10^5內可以使用

時間複雜度:O(n loglogn)

const int MAX=100;
int prime[MAX],pNum=0;//pNum素數個數 
bool p[MAX]={0};//素數為true 
bool is_Prime(int n)
{
    if(n<=1) return false;//特判
    else
{ for(long long i=2;i*i<=n;i++){//開longlong防止i*i溢位 if(n%i==0) return false; } return true; } } void find_prime(){ for(int i=1;i<=MAX;i++){ if(is_prime(i)==true){ prime[pNum++]=i; p[i]=true; } } }
View Code

2.篩法:

時間複雜度:O(n loglogn)

如果i為素數則i的倍數不為素數,前提是首先知道2為素數,因此第一次迴圈從2開始。表長至少要比n大1

const int MAX=101;//100內的素數 
int prime[MAX],pNum=0;//pNum素數個數 
bool p[MAX]={0};//素數為false
void Find_prime(){
    for(int i=2;i<MAX;i++){//不能寫i<MAX 
        if(p[i]==false){
            prime[pNum++]=i;
            for(int j=i+i;i<MAX;j+=i){
                p[j]=true;
            }
        }    
    }
} 
View Code