数値がC++で2つの豊富な数値の合計として表現できるかどうかを確認します
番号があるとします。これを2つの過剰数の合計として表す必要があります。はいの場合は数値を出力し、そうでない場合は-1を出力します。数は過剰数と呼ばれ、その数のすべての適切な除数の合計であり、sum(n)は数の値よりも大きいことで示されます。
これを解決するために、すべての過剰数をセットに格納し、指定された数nに対して、i =1からnのループを実行し、nと(n – i)が過剰かどうかを確認します。
例
#include <iostream> #include <set> #define N 100005 using namespace std; set<int> getAbundantSet() { set<int> abundant_set; for (int i = 1; i < N; i++) { int sum = 1; for (int j = 2; j * j <= i; j++) { if (i % j == 0) { sum += j; if (i / j != j) sum += i / j; } } if (sum > i) abundant_set.insert(i); } return abundant_set; } void representSumAbundant(int number){ set<int> abundant_set = getAbundantSet(); for (int i = 1; i <= number; i++) { if (abundant_set.count(i) && abundant_set.count(number - i)) { cout << i << " " << number - i; return; } } cout << -1; } int main() { int n = 30; representSumAbundant(n); }
出力
12 18
-
数値がC++で2つの三角数の合計として表現できるかどうかを確認します
このセクションでは、1つの数を2つの三角数の合計として表現できるかどうかを確認します。三角数は以下のようになります- 例から、1、3、6、10はいくつかの三角数であることがわかります。数N(たとえば16)を2つの三角数(6、10)の合計として表す必要があります。 アプローチは非常に簡単です。 N未満のすべての三角数を取得する必要があります。これらの値からセットを作成します。ここで、集合からXと言う数を取り、N – Xが集合に存在するかどうかを確認する必要があります。そうすると、Xは2つの三角数の合計として表すことができます。 例 #include <iostream> #
-
Pythonで素数が2つの素数の合計として表現できるかどうかを確認します
素数nがあるとします。 nをx+yとして表現できるかどうかを確認する必要があります。ここで、xとyも2つの素数です。 したがって、入力がn =19の場合、19 =17 + 2 のように表現できるため、出力はTrueになります。 これを解決するには、次の手順に従います- 関数isPrime()を定義します。これには数がかかります 数値<=1の場合、 Falseを返す 数値が2と同じ場合、 Trueを返す 数値が偶数の場合、 Falseを返す 範囲3から((数値の平方根)+ 1)の整数部分のiの場合、2ずつ増やします。 数値がiで割り切れる場合、 Falseを返す Tru