在C ++中计算将N减少为0所需的给定类型的计数操作

我们给定一个正整数N。目标是找到将N减少为0所需的操作数。应用的操作为N = NP,其中P是P的最小素数。

让我们用例子来理解

输入-N = 17

输出-将N减少到0所需的给定类型的操作数为-1

说明-17的最小素数本身就是17。因此,该操作仅应用一次17-17 = 0。

输入-N = 20

输出-将N减少到0所需的给定类型的操作数为-10

说明-最小的20除数是2。一次又一次地减去2,找到下一个除数:

20%2==0, 20-2=18

18%2==0, 18-2=16

…………………..14, 12, 10, 8, 6, 4, 2, 0 Total 10 times the operation is applied.

以下程序中使用的方法如下

对于所有偶数N,最小的素数除数总是2,从偶数N减去2将再次产生偶数。对于所有奇数,最小的主除数将是奇数,从奇数中减去奇数后,数字将变为偶数,因此2将再次成为最小的主除数。为了找到最小的素数除数,从i = 2到i开始,使得i * i <N并且N%i == 0。这样,总操作数将为count = 1 +(Ni)/ 2。

  • 以整数N作为输入。

  • 函数N_to_Zero(int N)取N,并返回将N减小为0所需的操作数。

  • 将count的初始值设为0。

  • 从i = 2开始。在(i * i)<N且N不能被i整除(N%i!= 0)时开始遍历。增量i。

  • 如果(i * i)超过N,则设置i = N。

  • 操作次数将为1+(Ni)/ 2。

  • 将计数设置为1+(Ni)/ 2。

  • 返回计数作为结果。

示例

#include<bits/stdc++.h>

using namespace std;

int N_to_Zero(int N){

   int count = 0;

   int i = 2;

   while((i * i) < N && (N % i)){

      i++;

   }

   if((i * i) > N){

      i = N;

   }

   count = 1 + (N-i)/2;

   return count;

}

int main(){

   int N = 10;

   cout<<"Count of operations of the given type required to reduce N to 0 are: "<<N_to_Zero(N);

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Count of operations of the given type required to reduce N to 0 are: 5

以上是 在C ++中计算将N减少为0所需的给定类型的计数操作 的全部内容, 来源链接: utcz.com/z/353390.html

回到顶部