等比数列二分法求和

#include <iostream>
#include <cstdio> 
#define ll long long
using namespace std;

ll pow_mod(ll a, ll b, ll mod) {
    ll ans = 1;
    a %= mod;
    while (b) {
        if (b & 1) {
            ans = ans * a % mod;
        }
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
ll sum(ll a, ll n,ll M)
{
    if (n == 1) return a;
    ll t = sum(a, n / 2,M);
    if (n & 1)
    {
        ll cur = pow_mod(a, n / 2 + 1,M);
        t = (t + t * cur % M) % M;
        t = (t + cur) % M;
    }
    else
    {
        ll cur = pow_mod(a, n / 2,M);
        t = (t + t * cur % M) % M;
    }
    return t;
}

int main()
{
    ll a, n,M;
    int T;
    cin >> T;
    while (T--) {
        cin >> a >> n >> M;
        cout << sum(a, n,M)<< endl;
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/wysAC666/p/10922697.html

以下是Java实现二分法对有序数列查找的代码示例: ``` public class BinarySearch { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; // target not found } public static void main(String[] args) { int[] array = {1, 3, 5, 7, 9}; int target = 5; int result = binarySearch(array, target); if (result == -1) { System.out.println("Target not found"); } else { System.out.println("Target found at index " + result); } } } ``` 在上面的代码中,`binarySearch`方法接受一个有序整数数组和一个目标整数作为参数,返回目标整数在数组中的索引(如果存在),否则返回-1。方法使用while循环进行二分查找,每次将数组分成两半,并将目标整数与数组的中间元素比较,以确定它在哪一半。如果目标整数等于中间元素,则返回中间元素的索引。如果目标整数小于中间元素,则在左半部分继续查找。如果目标整数大于中间元素,则在右半部分继续查找。如果在循环结束时仍未找到目标整数,则返回-1。 在`main`方法中,我们创建一个有序整数数组和一个目标整数,并调用`binarySearch`方法来查找目标整数在数组中的索引。如果目标整数不存在于数组中,则输出“Target not found”,否则输出“Target found at index [index]”。在上面的示例中,我们查找整数5在数组[1, 3, 5, 7, 9]中的索引,结果为2,因为5在数组中的第3个位置(从0开始计数)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值