C++で指定された範囲内のK個の奇数の約数を持つ数を検索します
この問題では、L、R、およびkの3つの整数値が与えられます。私たちの仕事は、与えられた範囲でK個の奇数の約数を持つ数を見つけることです。正確にk個の除数を持つ[L、R]の範囲の数の数を見つけます。
1と数自体を除数として数えます。
問題を理解するために例を見てみましょう
入力
a = 3, b = 10, k = 3
出力
2
説明
Numbers with exactly 3 divisors within the range 3 to 10 are 4 : divisors = 1, 2, 4 9 : divisors = 1, 3, 9
ソリューションアプローチ
この問題の簡単な解決策は、k除数を数えることです。したがって、kが奇数になるには(問題に示されているように)、その数は完全な平方でなければなりません。したがって、完全な平方数についてのみ除数の数をカウントします(これによりコンパイル時間が節約されます)。また、除数の数がkの場合、numbercountに1を加算します。
ソリューションの動作を説明するプログラム
例
#include<bits/stdc++.h>
using namespace std;
bool isPerfectSquare(int n) {
int s = sqrt(n);
return (s*s == n);
}
int countDivisors(int n) {
int divisors = 0;
for (int i=1; i<=sqrt(n)+1; i++) {
if (n%i==0) {
divisors++;
if (n/i != i)
divisors ++;
}
}
return divisors;
}
int countNumberKDivisors(int a,int b,int k) {
int numberCount = 0;
for (int i=a; i<=b; i++) {
if (isPerfectSquare(i))
if (countDivisors(i) == k)
numberCount++;
}
return numberCount;
}
int main() {
int a = 3, b = 10, k = 3;
cout<<"The count of numbers with K odd divisors is "<<countNumberKDivisors(a, b, k);
return 0;
} 出力
The count of numbers with K odd divisors is 2
-
C++で指定された違いを持つペアを見つけます
配列Aがあるとすると、n個の異なる要素があります。 xとyの差が与えられた差dと同じになるように、配列Aからペア(x、y)を見つける必要があります。要素のリストがA=[10、15、26、30、40、70]のようで、差が30の場合、ペアは(10、40)と(30、70)になります この問題を解決するために、配列がソートされていると仮定し、左から2つのポインターをポイント要素に取ります。最初は、最初の1つの「i」が最初の要素を指し、2番目の「j」がポイント要素を指します。 2番目の要素。 A [j] – A [i]がnと同じ場合、ペアを出力します。A[j] – A [i]
-
C++で指定されたインデックスを持つNフィボナッチ数のGCDを検索します
ここでは、指定されたインデックスを持つn個のフィボナッチ項のGCDを見つける必要があります。したがって、最初に最大インデックスを取得し、フィボナッチ項を生成する必要があります。いくつかのフィボナッチ項は次のようになります:0、1、1、2、3、5、8、13、21、34、…..インデックスは開始です0から。したがって、0 thの要素 インデックスは0です。インデックス{2、3、4、5}でフィボナッチ項のgcdを見つける必要がある場合、項は{1、2、3、4}であるため、これらの数値のGCDは1です。 このタスクを実行するために、1つの興味深いアプローチを使用します。 GCD(Fibo(i)、Fi