用 C++ 統計給定範圍內 x^2 = 1 (mod p) 的解的個數


給定整數 x 和 p。目標是找到方程 −x2=1 ( mod p ) 的解的個數,其中 x 在範圍 [1,N] 內。

我們將透過遍歷 1 到 N 並將每個數字作為 x 來檢查 (x*x)%p==1。如果是,則遞增計數。

讓我們透過示例來理解。

輸入 − n=5, p=2

輸出 − 解的個數 − 3

解釋 − 1 到 5 的範圍內。

12=1%2=1, count=1
22=4%2=0, count=1
32=9%2=1, count=2
42=16%2=0, count=2
52=25%2=1, count=3
Total number of solutions=3.

輸入 − n=3, p=4

輸出 − 解的個數 − 2

解釋 − 1 到 3 的範圍內。

12=1%4=1, count=1
22=4%4=0, count=1
32=9%4=1, count=2
Total number of solutions=2

下面程式中使用的方案如下

  • 我們取兩個變數 n 和 p。

  • 函式 solutionsCount(int n,int p) 獲取兩個引數 n 和 p,並返回方程:x2%p==1(或 x2=1 ( mod p ))的解的個數。

  • 從 x=1 到 x=n 開始,檢查 x*x==1,如果是,則遞增計數。

  • 在迴圈結束時,count 將包含解的個數。

  • 返回 count 作為結果。

示例

 即時演示

#include<bits/stdc++.h>
using namespace std;
int solutionsCount(int n, int p){
   int count = 0;
   for (int x=1; x<=n; x++){
      if ((x*x)%p == 1)
         { ++count; }
   }
   return count;
}
int main(){
   int n = 8, p = 3;
   cout<<"Number of solutions :"<<solutionsCount(n, p);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出:

Number of solutions : 6

更新於: 2020-08-29

87 次檢視

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.