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