素數問題

此次記錄一道ACM很簡單的一道題。ios

連接描述數組

題目意思呢是:輸入三個數。a,d,n;
而後造成一個序列:a,a+d;a+2d;a+3d…………
從中尋找素數,輸出第n個素數。函數

素數呢,就是隻能整除1和它自己的數。
貼個斷定素數的代碼:spa

bool sushu(int a)
 {
     float a1;
     a1=a;
     int i,k;
     k=sqrt(a1);//sqrt()函數爲求根號函數,須要加頭文件:#include<cmath> 
     if(a==1)//此處注意,我以前就是忘了有a=1這種狀況,而提交失敗。a=1時,直接返回false,不是素數。
         return false;
     for(i=2;i<=k;i++)
     {
         if(a%i==0)
             return false;
    }
    return true;
 }

作這道題個人思路呢是這樣的。先建一個數組k,而後對a,a+d,a+2d……一個個的斷定,是不是素數,如果,則存入數組。那麼結果只要輸出k[n-1]就能夠了。.net

如下是完整代碼:3d

#include<iostream>
#include<cmath> 
using namespace std;
bool sushu(int a);//判斷是否素數,是返回true,否返回false 
int main()
{
    int a,b,c;
    while(1)
    {
        int i;
        cin>>a>>b>>c;
        if(a==0&&b==0&&c==0)
            break;
        int *k=new int[c];
        for(i=0;i<c;)
        {
            if(sushu(a))
                {
                    k[i]=a;
                    i++;
                }
            a=a+b;
         }
         cout<<k[c-1]<<endl;
    } 
    return 0;
 }
 bool sushu(int a)
 {
     float a1;
     a1=a;
     int i,k;
     k=sqrt(a1);
     if(a==1)
         return false;
     for(i=2;i<=k;i++)
     {
         if(a%i==0)
             return false;
    }
    return true;
 }

這道題雖然很簡單,可是我一開始作的時候仍是遇到了很多的問題。大可能是因爲我本身的基礎不夠紮實形成的。
好比不知道如何斷定是不是素數。(這個很簡單,知道素數的定義應該就明白了)。
還有一個是,我不習慣調用函數,總是把全部代碼都寫在主函數中,又麻煩,又不易理解,容易錯。不是一個好習慣,之後改正。code

相關文章
相關標籤/搜索