山东省第八届ACM省赛 G 题(sum of power)

来源:互联网 发布:mac spss24破解码 编辑:程序博客网 时间:2024/06/06 15:04

Problem Description

Calculate  mod (1000000000+7) for givennm.

Input

Input contains two integers n,m(1≤n≤1000,0≤m≤10).

Output

Output the answer in a single line.

Example Input

10 0

Example Output

10


题意:给你n和m,把从1到n的m次幂相加,mod 10e9+7;

思路:循环加快速幂,其实不用快速幂也行,不过得自己写个pow函数;

ps:注意这是单输入,不能弄成多输入,否则会超时,这个题也是比较坑,比赛时一开始给的是10e8+7,所有人都不对

快速幂方法:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define mod 1000000007using namespace std;int n,m;long long sum;long long pow_mod(int a,int n,int m)//快速幂,a为底数,n为幂数,m为mod数;{    if(n==0) return 1;    long long x=pow_mod(a,n/2,m);    long long ans=(long long)x*x%m;    if(n%2==1) ans=ans*a%m;    return ans;}int main(){    scanf("%d%d",&n,&m);    sum=0;    for(int i=1;i<=n;i++){        sum+=pow_mod(i,m,mod);        sum=sum%mod;    }    cout<<sum<<endl;    return 0;}

pow函数方法:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define mod 1000000007using namespace std;int m,n;long long sum;long long pow(int a,int n){    long long ans=1;    for(int i=0;i<n;i++){        ans*=a;        ans=ans%mod;    }    return ans;}int main(){    scanf("%d%d",&n,&m);    sum=0;    for(int i=1;i<=n;i++){        sum+=pow(i,m);        sum=sum%mod;    }    cout<<sum<<endl;    return 0;}



0 0
原创粉丝点击