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


HuangNO1 (雷姆醬)

學校 : 中南大学
編號 : 60967
來源 : [103.156.242.195]
最後登入時間 :
2023-12-03 15:57:20
a010. 因數分解 | From: [36.227.161.239] | 發表日期 : 2018-06-12 16:41

一開始的程式碼一長串 雖然在測試執行得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 (雷姆醬)

學校 : 中南大学
編號 : 60967
來源 : [103.156.242.195]
最後登入時間 :
2023-12-03 15:57:20
a010. 因數分解 | From: [36.227.161.239] | 發表日期 : 2018-06-12 16:47

//有地翻寫錯了 修一下

 

一開始的程式碼一長串 雖然在測試執行得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 ;
}




 
ZeroJudge Forum