在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=1818%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