C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. 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]

  2. 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