#14093: 我是用C寫的 , 解題關鍵是如何將程式碼簡化 才不會一直TLE 其實題目不難


HuangNO1 (雷姆醬)


一開始的程式碼一長串 雖然在測試執行得AC,但送出時不行(TLE) 所以簡化後就AC了 凡事都要想要如何讓程式碼簡潔

#include <stdio.h>

int main()
{
    int math ;

    while ( scanf ( "%d" , &math ) != EOF){     // scanf( ) 如果輸入失敗會回傳EOF
        int i = 0 , t = 0 ;   // t 紀錄次方數

        for ( i = 2 ; i <= math ; i ++ ){  // 找因子 不用擔心會不會除到  不是質數的因子 因為那些非質數 在i = 它們前早被自己的質數因子給除盡
            while( !( math % i ) ){  //無除盡的情況下
                t++ ;
                math /= i ;
            }
            if ( t > 1 ){
                if ( math != 1 )     //  如果還沒除完 ( math = 1 )
                    printf ( "%d^%d * " , i , t ) ;
                else{
                    printf ( "%d^%d" , i , t ) ;
                    break ;
                }
            }
            else if ( t == 1 ){
                 if ( math != 1 )
                     printf ( "%d * " , i ) ;
                 else{
                     printf ( "%d" , i ) ;
                     break ;
                 }
            }
            t = 0 ;  // 重計算
        }
        printf ( "\n" ) ;  // 一定要換行
    }
    return 0 ;
}

#14094: Re:我是用C寫的 , 解題關鍵是如何將程式碼簡化 才不會一直TLE 其實題目不難


HuangNO1 (雷姆醬)


//有地翻寫錯了 修一下

 

一開始的程式碼一長串 雖然在測試執行得AC,但送出時不行(TLE) 所以簡化後就AC了 凡事都要想要如何讓程式碼簡潔

#include

int main()
{
    int math ;

    while ( scanf ( "%d" , &math ) != EOF){     // scanf( ) 如果輸入結束(讀到字尾)會回傳EOF
        int i = 0 , t = 0 ;   // t 紀錄次方數

        for ( i = 2 ; i <= math ; i ++ ){  // 找因子 不用擔心會不會除到  不是質數的因子 因為那些非質數 在i = 它們前早被自己的質數因子給除盡
            while( !( math % i ) ){  //無除盡的情況下
                t++ ;
                math /= i ;
            }
            if ( t > 1 ){
                if ( math != 1 )     //  如果還沒除完 ( math = 1 )
                    printf ( "%d^%d * " , i , t ) ;
                else{
                    printf ( "%d^%d" , i , t ) ;
                    break ;
                }
            }
            else if ( t == 1 ){
                 if ( math != 1 )
                     printf ( "%d * " , i ) ;
                 else{
                     printf ( "%d" , i ) ;
                     break ;
                 }
            }
            t = 0 ;  // 重計算
        }
        printf ( "\n" ) ;  // 一定要換行
    }
    return 0 ;
}