若正整數 N 可以整除它的 4 個不同正因數之和,則稱這樣的正整數為“大美數”。本題就要求你判斷任一給定的正整數是否是“大美數”。
輸入格式:
輸入在第一行中給出正整數 K(≤10),隨后一行給出 K 個待檢測的、不超過 104 的正整數。
輸出格式:
對每個需要檢測的數字,如果它是大美數就在一行中輸出 Yes
,否則輸出 No
。
輸入樣例:
3
18 29 40
輸出樣例:
Yes
No
Yes
?這道題看了幾遍沒啥思路,主要卡到怎么遍歷得到四個不同正因數之和,查了下網上資料 四層for遍歷。 參考網上的思路寫了下代碼 卡到測試點1 測試點1是因為 求正因數時 判斷條件是小于等于。測試點2 3 4是因為 每層for遍歷時需要設置個標志位 ,一旦找到整除結果 就跳出四層for。還有一點就是n整除b, 數學上表達是? b%n==0? ,我的代碼如下
#include<vector>
#include <iostream>
using namespace std;
int main()
{int n;cin >> n;for (int i = 0; i < n; i++){int temp;vector<int>veca;cin >> temp;bool flag = false;for (int j = 1; j <=temp; j++){if (temp %j== 0){veca.push_back(j);}}if (veca.size() < 4){cout << "No" << endl;continue;}for (int a = 0; a < veca.size()&&!flag; a++){for (int b = a+1; b < veca.size()&&!flag; b++){for (int c = b+1; c < veca.size()&&!flag; c++){for (int d = c+1; d < veca.size()&&!flag; d++){int sum = veca[a] + veca[b] + veca[c] + veca[d];if (sum % temp ==0){cout << "Yes" << endl;flag = true;}}}}}if (!flag){cout << "No" << endl;}}
}