nCrがC++で指定された素数で割り切れるかどうかを調べます
3つの変数N、R、およびPがあるとします。NとRは、 N を取得するために使用されます。 C R Pは素数です。 N かどうかを確認する必要があります C R はPで割り切れる。いくつかの数N=7、R =2、P =3があるとすると、 7 C 2 =21、これは3で割り切れるので、出力はtrueになります。
N C R =N! /(R!*(N – R)!)。ルジャンドルの公式を使用して、任意のN!、R!を分割するPの最大の累乗にします。および(N – R)! NCRをPで除算できるようにするには、条件はNです。> R! +(N-R)!
例
#include <iostream> using namespace std; int getPower(int n, int p) { int pow = 0; while (n) { n /= p; pow += n; } return pow; } bool isDivisibleByP(int n, int r, int p) { // Find the highest powers of p // that divide n!, r! and (n - r)! int x1 = getPower(n, p); int x2 = getPower(r, p); int x3 = getPower(n - r, p); if (x1 > x2 + x3) return true; return false; } int main() { int n = 7, r = 2, p = 7; if (isDivisibleByP(n, r, p)) cout << "nCr is divisible by P"; else cout << "nCr is not divisible by P"; }
出力
nCr is divisible by P
-
C++でnに最も近くmで割り切れる数を見つけます
2つの整数nとmがあるとします。 nに最も近い数を見つけて、mで割る必要があります。そのような数値が複数ある場合は、絶対値が最大の数値を表示してください。 nがmで完全に割り切れる場合は、nを返します。したがって、n =13、m =4の場合、出力は12になります。 これを解決するには、次の手順に従います- q:=n / m、n1:=m*qとします 0の場合、n2:=m *(q + 1)、それ以外の場合、n2:=m *(q-1) if | n – n1 | <| n – n2 |、次にn1を返し、それ以外の場合はn2 例 #include<iostream> #incl
-
C ++で指定された文字列内の「1(0+)1」のすべてのパターンを検索します
文字列に1(0+)1のようなパターンがあるとします。ここで、(0+)は、空でない連続した1の出現を示します。すべてのパターンを見つける必要があります。パターンは重複する可能性があります。文字列は必ずしもバイナリ文字列である必要はありません。数字と小文字のみを保持できます。文字列が1101001のようなものであるとすると、そのようなパターンが2つあります。 101と1001。 この問題を解決するために、次の手順に従います- 文字列内のすべての文字cを繰り返し処理します cが1の場合、要素が0になるまで繰り返します 0のストリームが終了すると、次の文字が1かどうかを確認します