UVa 160 Factors ans Factorials(數論)

來源:互聯網
上載者:User

自從換了linux,就沒寫過題解。今天開始要繼續寫。

首先,求一個數的階層裡面每個素數因子的個數,那麼我們就可以求從2開始到這個數的每個數的素數因子的個數,相應加和。比如是10!= 1*2*3*4*5*6*7*8*9*10, 那麼 這裡面2的個數就是2,4, 6, 8, 10裡面2的因子數的加和1+2+1+3+1=8。依次類推

接下來就是求每個數的素因子及其個數,模板即可。不是很難的題目

其次要注意的輸出格式,這裡我犯了一個錯誤,沒有仔細考慮如果輸出的數的個數恰好是15的倍數,那麼最後一行就不應是再輸出換行了;還有在輸出換行的時候要注意的當k是15的倍數的時候,只輸出一個換行,因為k不是每次迴圈值都改變的,所以如果寫在if的外面,就會有很多換行輸出,不可取!因此,這個輸出的處理應該是每當有要輸出的數的時候,判斷一下是第幾個,如果k對15取餘為1,說明可以換行了,然後再輸出這個數,就避免了剛剛是15的倍數的情況!

核心代碼如下:

int anss[101];int main(){prime_sieve();int n;while ( scanf("%d",&n) != EOF && n ) {for ( int i = 2; i <= 100; ++i ) if (!is_prime(i) ) anss[i] = -1; else anss[i] = 0; for ( int i = 2; i <= n; ++i ) {IIV ans;prime_factorize(i, ans);int len = ans.size();for ( int i = 0; i < len; ++i ) anss[ans[i].first]+=ans[i].second;}printf("%3d! =", n);for ( int i = 2, k = 0; i <= n; ++i ) {if ( anss[i] != -1 ) {   k++;   if ( k > 1 && k % 15 == 1 ) printf("\n      ");   printf("%3d", anss[i]);}}printf("\n");}    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.