2017-12-02 114 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);