2 条题解
-
1Li Muchuan (shajing) LV 7 @ 2023-6-30 9:33:33
#include <iostream> using namespace std; // 求a的b次方对mod取模的值 long long fastPower(long long a, long long b, long long mod) { long long res = 1; a = a % mod; while (b > 0) { if (b % 2 == 1) { res = (res * a) % mod; } a = (a * a) % mod; b /= 2; } return res; } // 求序列第k项的值 long long getKthTerm(long long a, long long b, long long c, long long k) { if (b - a == c - b) { // 等差数列 long long d = b - a; return (a + (k - 1) * d) % 200907; } else { // 等比数列 long long q = b / a; return (a * fastPower(q, k - 1, 200907)) % 200907; } } int main() { int T; cin >> T; while (T--) { long long a, b, c, k; cin >> a >> b >> c >> k; long long result = getKthTerm(a, b, c, k); cout << result << endl; } return 0; }
这个代码中,我们首先定义了一个快速幂算法
fastPower
,用于求解a的b次方对mod取模的值。然后定义了一个函数getKthTerm
,用于求序列的第k项的值。在getKthTerm
函数中,首先判断序列的类型,如果是等差数列,则计算第k项的值为a + (k - 1) * d;如果是等比数列,则计算第k项的值为a * (q^(k - 1))。最后在主函数中,根据输入的测试数据,调用getKthTerm
函数计算第k项的值,并输出结果。分享
-
02023-1-25 13:38:55@
#include <iostream> using namespace std; const long long M=200907; long long quickpow(long long a,long long b) { long long ret=1; while(b!=0) { if(b%2==1) { ret=(ret*a%M)%M; } a=a*a%M; b/=2; } return ret%M; } long long a,b,c; long long k; long long t; int main() { cin>>t; while(t--) { cin>>a>>b>>c>>k; if(b-a==c-b) { long long d=(b-a)%M; cout<<((k-1)%M*d+a%M)%M<<endl;; } else { long long d=b/a%M; cout<<(quickpow(d,k-1)*a%M)%M<<endl; } } return 0; }
模拟题,不太难······求点赞栓Q
- 1
信息
- ID
- 502
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 30
- 已通过
- 14
- 上传者