用c++程式撰寫: 1.求因數→輸入整數n,求所有能整除n的因數→只能使用 goto語法不能使用迴圈 2.求質數→最接近n的最大與最小質數→輸入整數n 以上兩題要如何撰寫請求解答謝謝!!?

1 個解答

評分
  • 4 星期前

    // P1

    #include<iostream>

    using namespace std;

    template<typename T>

    void fac(

      T s,

      T n

    ){

    START:

      if(s*s > n) return;

      if(n%s != 0) {++s; goto START;}

      cout << ' ' << s;

      if(s*s < n){

        fac(1+s, n);  cout << ' ' << n/s;

      }

      return;

    }

    //

    int main(void){

      unsigned n;

    LOOP_MAIN:

      if(cout<<"give me a positive number: " && cin>>n && n>0){

        fac<unsigned>(1,n);

        cout<<endl;

        goto LOOP_MAIN;

      }

      return 0;

    }

    //

    //

    //

    // P2

    #include<stdlib.h>

    #include<iostream>

    using namespace std;

    int main(void){

      unsigned long L;

      bool *p;

      for(;

            cout << "give me a unsigned number: "

         && cin  >> L

         && 0    <  L

         && (p   = (bool*) calloc(sizeof(*p), 1+L)) != NULL

          ; free(p)

          , p = NULL

         ){

        unsigned long i,j;

        p[0] = p[1] = 1;

        for(i=2; i*i <= L; (i&1)?(i+=2):++i)

          if(0 == p[i]){

            for(j = i+i; j<=L; j+=i) p[j]=1;

          }

        for(i=L-1; i > 0 && p[i]; --i);

        if(i > 0) cout << i << endl;

        else cout << "No smaller prime." << endl;

        ++L;

        L += (1&L) == 0;

        for(;;L += 2){

          for(i=3; (i*i < L) && (L%i); i+=2);

          if(i*i>L) { cout << L << endl; break;}

        }

      }

      return 0;

    }

還有問題?馬上發問,尋求解答。