輕鬆求素數

沒有作什麼溢處判斷.比如n 超過int 最大值,數組長度小於 len等.作爲素數條件
1.素數一定是奇數 :)
2.素數只能整除1和他自己
3.奇數如果不能整除比他小的素數,則爲素數。這個範圍可以更小,就是除到比這個數開方小的素數即可
如果都不能整除則此數爲素數。當然不能在程序裏面做開方運算,速度太慢。換作 n < array[j] * array[j]
相對乘法比開方除法快
//保證array 開闢區間比len大
void prime(int* array,int len)
{
 array[0] = 2;   //數組至少有一個空間
 int n = 3;
 for(int i=1;i<len;i++) //從第二個素數開始
 {
  for(int j=0;j<i;j++)
  {
   if(n%array[j] == 0)   
   {
    n += 2;    //奇數作爲素數的侯選者
    j=0;
    continue;
   }
   if(n < array[j] * array[j])  //如果彙編的話一次除法可以的到商和餘數,但c裏面只能一次一個。用乘法取代除
    break;
  }
  array[i] = n;
  n += 2;
 }
}


下面是簡單求一個偶數拆成兩個素數的程序:

   int a,b,c,d;
    int temp;
    scanf("%d",&a);
    for(b=3;b<=a/2;b+=2)
    {
        temp = sqrt((float)b);
        for(c=2;c<=temp;c++)
        {
            if(b%c==0)
            {
                break;
            }
        }
        if(c>temp)
            d=a-b;
        else
            break;
        temp = sqrt((float)d);
        for(c=2;c<=temp;c++)
        {
            if(d%c==0)
            {
                break;
            }
        }
        if(c>temp)
            printf("%d=%d+%d/n",a,b,d);
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章