数値が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