zoukankan      html  css  js  c++  java
  • 【JZOJ4229】学习神技【数论,数学】

    题目大意:

    题目链接:https://jzoj.net/senior/#main/show/4229
    求首项为a1a_1,公比为qq,项数为nn的等比数列的和。


    思路:

    众所周知,n1n-1项的等比数列和的公式是
    {a1×(qn1)q1(q1)a1×n(q=1)left{egin{matrix} frac{a_1 imes (q^n-1)}{q-1}(q eq 1) \ a_1 imes n(q=1)end{matrix} ight.

    证明:
    若这个等比数列为a1+a1×q1+a1×q2+...+a1×qna_1+a_1 imes q^1+a_1 imes q^2+...+a_1 imes q^n
    S=a1+a1×q1+a1×q2+...+a1×qnS=a_1+a_1 imes q^1+a_1 imes q^2+...+a_1 imes q^n
    qS=a1×q1+a1×q2+...+a1×qn+a1×qn+1qS=a_1 imes q^1+a_1 imes q^2+...+a_1 imes q^n+a_1 imes q^{n+1}
    相减得qSS=a1×q1+a1×q2+...+a1×qn+a1×qn+1a1a1×q1a1×q2...a1×qnqS-S=a_1 imes q^1+a_1 imes q^2+...+a_1 imes q^n+a_1 imes q^{n+1}-a_1-a_1 imes q^1-a_1 imes q^2-...-a_1 imes q^n
    简化得(q1)S=a1×qn+1a1(q-1)S=a_1 imes q^{n+1}-a_1
    移向得S=a1×(qn+1a1)q1S=frac{a_1 imes (q^{n+1}-a_1)}{q-1}
    证毕。

    利用快速幂计算qnq^n,再用逆元求答案即可。


    代码:

    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    
    const ll MOD=1000000007ll;
    int T;
    ll n,q,a,k,Read,ans;
    char ch;
    
    ll read()
    {
    	Read=0;
    	ch=getchar();
    	while (ch<'0'||ch>'9') ch=getchar();
    	while (ch>='0'&&ch<='9')
    		Read=(Read<<3)+(Read<<1)+ch-48,ch=getchar();
    	return Read;
    }
    
    void write(ll x)
    {
    	if (x>9) write(x/10);
    	putchar(x%10+48);
    }
    
    ll power(ll x,ll m)  //快速幂
    {
    	ll ans=1;
    	while (m)
    	{
    		if (m&1) ans=ans*x%MOD;
    		x=x*x%MOD;
    		m>>=1;
    	}
    	return ans;
    }
    
    int main()
    {
    	T=read();
    	while (T--)
    	{
    		a=read(),q=read(),n=read();
    		if (q==1) write(a*(n%MOD)%MOD);  //特判
    		else
    		{
    			k=power((q-1)%MOD,MOD-2);  //求逆元
    			ans=a%MOD*(power(q%MOD,n)-1)%MOD*k%MOD;
    			write(ans);
    		}
    		putchar(10);
    	}
    	return 0;
    }
    
  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998387.html
Copyright © 2011-2022 走看看