2020年8月16日 星期日

a740: 質因數之和

 a740: 质因数之和

題目來源 https://zerojudge.tw/ShowProblem?problemid=a740


顧名思義,求質因數的和。求因數當然不難,但這題的測資最大接近20億,如果是跑回圈一個一個檢測,難保不會TLE(超時),給幾個優化的思維。

1.將收到的數開根號,找2到測資開根號之間有沒有因數。

2.質數只可能出現在6A+1或6A-1的地方。


以下附上程式碼:

如果有不懂得地方歡迎來信或留言。

#include <iostream>
#include <math.h>

using namespace std;


int main()
{
    cin.tie(0) , cin.sync_with_stdio(0);
    int n , sum;
    while(cin >> n) {
        if(n <= 1) {
            cout << 0;
            continue;
        }
        sum = 0;
        while(n % 2 == 0) {
            sum += 2;
            n /= 2;
        }
        while(n % 3 == 0) {
            sum += 3;
            n /= 3;
        }
        int a = sqrt(n) + 1;
        for(int i = 6; i < a; i++) {
            
            while(n % (i - 1) == 0) {
                sum += (i - 1);
                n /= (i - 1);
            }
            while(n % (i + 1) == 0) {
                sum += (i + 1);
                n /= (i + 1);
            }
        }
        if(n != 1) sum += n;
        cout << sum << "\n";
    }

    return 0;
}

沒有留言:

張貼留言

o079. 4. 最佳選擇

 題目描述: 給一個長度為 n 的正整數序列 a1,a2...an ,你可以執行多次操作 (包含 0 次),每次操作只能選擇這個序列的第一個或最後一個數字,再將這個數字從序列中刪除並自己搜集起來。 求滿足總和不超過 k 且搜集的數字奇數和偶數個數相同的條件下,所能搜集的數字總和最...