2017-12-02 84 views
0

我得到這個活兒,我想如果可能的話如何優化它的時候開始。優化代碼,不是從1每次經過for循環

#include "stdio.h" 
#include "math.h" 
int funk(n){ 
    int a=1,b=1,j,i,flag=0; 
    for(a=1;a<n;a++){ 
     for(b=1;b<n;b++){ 
      if((pow(a,2)*b)-a+b+(a*pow(b,2))==n){  
       for(i=1;i<a;i++){ 
        for(j=i;j<a;j++){ 
         if(a%i==0 && a%j==0 && b%(i+j)==0){ 
           printf("For n= %d equation has solutions %d and %d \n",n,a,b); 
           flag = 1; 

         } 
        } 
       } 
      } 
     } 
    } 
    if(flag==2){ 
     printf("For n= %d equation has no solution \n",n); 
    } 
    return 0; 
} 
int main(){ 
    int n,i; 
    printf("Input n "); 
    scanf("%d",&n); 
    for(i=1;i<n+1;i++){ 
     funk(i); 
    } 
    return 0; 
} 

我在想for循環中funk()所以當我在main()進入n並呼籲funk()和例如n爲10000執行時間很長,因爲它從1開始,每嘗試。

+0

第1步:瞭解它做什麼。 –

+0

你想要的是,對於程序的不同執行,n應該從不同的數字開始,因爲它已經計算了以前的輸入值? –

+0

'int funk(n){}'n是什麼?假設這是一個錯字,應該是'INT芬克(INT N)'這是矯枉過正使用'pow'計算平方,你最終比較'和'int' double'。 –

回答

0

所以讓這一切從頭再來每次。你並不需要在主迴路,您可以FUNC改變:

int funk(n){ 
    int a=1,b=1,j,i,flag=0; 
    for(a=1;a<n;a++){ 
     int n2= a; 
     for(b=1;b<n2;b++){ 
      if((pow(a,2)*b)-a+b+(a*pow(b,2))==n2){ 

,並調用它像

funk(n+1);