在AP中查找First元素,它是C ++中给定Prime的倍数

概念

关于算术级数的给定的第一项(A)和共同差(d),以及质数(P),我们的任务是确定给定AP中第一个元素的位置,该位置被视为A的倍数。给定素数P。

输入值

A = 3, d = 4, P = 5

输出结果

3

说明

给定AP的第四项是素数5的倍数。

第一学期= 3

第二学期= 3 + 4 = 7

第三学期= 3 + 2 * 4 = 11

第四项= 3 + 3 * 4 = 15

方法

假设术语为AN。结果,

AN =(A +(N-1)* d)

因此,假设AN是P的倍数。因此,

A +(N-1)* d = l * P

在此,l是常数。

因此,假设A为(A%P),d为(d%P)。现在,我们有(N-1)* d =(l * P – A)。

借助于在RHS上加减P,我们获得-

(N-1)* d = P(l-1)+(PA),

在这种情况下,PA被视为非负数

(因为A被小于P的A%P代替)最后在两边取mod-

((N-1)* d)%P =(PA)%P或((N-1)d)%P = PA

假设计算Y <P,因此(d * Y)%P =1。现在,将该Y称为d相对于P的逆模。

最后答案N是-

(((Y *(PA))%P)+ 1。

示例

#include <bits/stdc++.h>

using namespace std;

//显示要计算的迭代函数

//O(log y1)中的(x1 ^ y1)%p1 * /

int power(int x1, int y1, int p1){

   //用于初始化结果

   int res1 = 1;

   //,则用于更新x

   //等于p-

   x1 = x1 % p1;

   while (y1 > 0) {

      //已经看到,如果y1是奇数,则将x1乘以

      result

      if (y1 & 1)

         res1 = (res1 * x1) % p1;

         //y1必须是现在

      y1 = y1 >> 1; // y1 = y1/2

      x1 = (x1 * x1) % p1;

   }

   return res1;

}

//显示功能以查找共同点中最接近的元素

int NearestElement1(int A, int d, int P){

   //显示基本条件

   if (A == 0)

      return 0;

   else if (d == 0)

      return -1;

   else {

      int Y = power(d, P - 2, P);

      return (Y * (P - A)) % P;

   }

}

//驱动程式码

int main(){

   int A = 3, d = 4, P = 5;

   //用于模块A和d-

   A %= P;

   d %= P;

   //显示函数调用

   cout << NearestElement1(A, d, P);

   return 0;

}

输出结果

3

以上是 在AP中查找First元素,它是C ++中给定Prime的倍数 的全部内容, 来源链接: utcz.com/z/330894.html

回到顶部