3 条题解

  • 1
    @ 2021-8-7 21:15:26

    C++ :

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int p,depth=0;
    
    int gcd( int a,int b )
    {
        if ( !b ) return a;
        return gcd( b,a%b );
    }
    
    bool IDAstar( int sum,int x,int y )
    {
        if ( sum==depth )
        {
            if ( x==p ) return 1;
            else return 0;
        }
        if ( x<<(depth-sum)<p ) return 0;
        if ( p%(gcd(x,y))!=0 ) return 0;
    
        int a,b;
    
        a=x+y; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+y; b=x;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+x; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+x; b=x;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=y+y; b=x; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=y+y; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x-y; b=x; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x-y; b=y; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
    
        return 0;
    }
    
    int main()
    {
        scanf( "%d",&p );
    
        while ( !IDAstar( 0,1,0 ) ) depth++;
    
        printf( "%d",depth );
    }
    
    • 0
      @ 2024-12-7 17:56:14

      看我🎭表演

      #include <iostream>
      #include <cmath>
      using namespace std;
      int main(){
      	int p;
      	cin>>p;
      	for(int i=1;i<=31;i++){
      		if(pow(2,i)>p){
      			cout<<i+1;
      			break;
      		}
      	} 
      }
      
      • -1
        @ 2026-5-16 17:49:24

        #include #include using namespace std; int p,depth=0;

        int gcd( int a,int b ) { if ( !b ) return a; return gcd( b,a%b ); }

        bool IDAstar( int sum,int x,int y ) { if ( sumdepth ) { if ( xp ) return 1; else return 0; } if ( x<<(depth-sum)<p ) return 0; if ( p%(gcd(x,y))!=0 ) return 0;

        int a,b;
        
        a=x+y; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+y; b=x;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+x; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x+x; b=x;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=y+y; b=x; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=y+y; b=y;
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x-y; b=x; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        a=x-y; b=y; if ( a<b ) swap( a,b );
        if ( b && IDAstar( sum+1,a,b ) ) return 1;
        
        return 0;
        

        }

        int main() { scanf( "%d",&p );

        while ( !IDAstar( 0,1,0 ) ) depth++;
        
        printf( "%d",depth );
        

        }

        • 1

        信息

        ID
        104
        时间
        1000ms
        内存
        128MiB
        难度
        1
        标签
        递交数
        75
        已通过
        55
        上传者