• 因子k次幂之和


    题意:

    给你一个区间[L,R],求L到R的所有数的因子的k次幂之和

    思路:

    对于(1—r)每个数,求它的因子和。如何求呢?我们可以枚举(i=1-r),以i作为因子的iki^k,然后对于每个有以i为因子的数都加上它,对于每个数的因子次幂和放到a[i]数组里。例如以2为因子的有2,4,6,8,10…,然后以3为因子的有3,6,9,12…具体意思看代码应该能明白

    代码:

    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    #include <vector>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <set>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    ll a[1000500];
    ll quick(ll a,ll b)
    {
        ll ans=1;
        while(b)
        {
            if(b&1)
                ans=ans*a%mod;
            a=a*a%mod;
            b/=2;
        }
        return ans;
    }
    void solve()
    {
        int l,r,k;
        scanf("%d%d%d",&l,&r,&k);
        memset(a,0,sizeof(a));
        for(int i=1;i<=r;i++)
        {
            ll x=quick(i,k);
            for(int j=i;j<=r;j+=i)//以i为因子的,2i,3i,4i,5i...
                a[j]=(a[j]+x)%mod;
        }
        ll ans=0;
        for(int i=l;i<=r;i++)
            ans=(ans+a[i])%mod;
        printf("%lld
    ",ans);
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        int t;
        scanf("%d",&t);for(int i=1;i<=t;i++)solve();
    }
  • 相关阅读:
    jdk与jre安装之后的名字
    手机用笔记本上网
    Django简易安装
    python 结巴分词
    Elasticsearch shield权限管理详解
    nginx配置初步
    linux 使用 rz 和 sz 命令
    eclipse 鲜为人知的调试技巧,你用过多少
    HDOJ 题目3555 Bomb(数位DP)
    Ubuntu1204 vim中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/zzl_Alexander/p/11982780.html
Copyright © 2020-2023  润新知