首页 > 其他分享 >2023.04.14 定时测试随笔 T2

2023.04.14 定时测试随笔 T2

时间:2023-04-14 20:34:27浏览次数:62  
标签:... 14 9901 int 2023.04 sum T2 maxn

T2 P1593 因子和

传送门:洛谷P1593

既然要求因子和,那我们就先对 \(a\) 分解质因数,得:

              \(a = p_1^{k_1} + p_2^{k_2} + p_3^{k_3}... + p_n^{k_n}\)

所以 \(a^b\) 质因数分解就会得到:

              \(a^b = p_1^{k_1*b} + p_2^{k_2*b} + p_3^{k_3*b}... + p_n^{k_n*b}\)

接下来,就是对所有因子求和:

\(ans = (1+p_1^1+p_2^2+p_3^3...p_1^{k_1*b})(1+p_2^1+p_2^2+p_2^3...p_2^{k_2*b})....(1+p_n^1+p_n^2+p_n^3...p_n^{k_n*b})\)

对于上面这个式子,每一个乘数都是一个等比数列,根据等比数列求和公式:

               \(sum = \frac{p^n - 1}{p - 1}\)

我们可以用快速幂求出 \(p^n-1\) 因为要对 \(9901\) 取模,所以我们要求 \(p - 1\) 得逆元,\(9901\)是质数,可以用费马小定理求,\(x^{-1} = pow(x, mod - 2)\);

还有一种特殊情况:

  • \(p-1\) \(mod\) \(9901 == 0\) 那么 \(p\) \(mod\) \(9901 == 1\),所以 \(sum = 1 + p_1^1 mod9901 + p_2^2mod9901 + ...= 1 + n\)

贴代码:

#include <bits/stdc++.h>

typedef long long ll;
using namespace std;

const int maxn = 5e7 + 5;
const int modl = 9901;
ll p[maxn], k[maxn];
int a, b, cnt;
void Pre() {
    int x = a;
    for (int i = 2; i <= sqrt(x); ++ i) {
        if (x % i) continue ;
        p[++ cnt] = i;
        while (x % i == 0) {
            k[cnt] ++, x /= i;
        }
    }
    if (x != 1) {
        p[++ cnt] = x;
        k[cnt] ++;
    }
}

ll poww(ll a, ll b) {
    ll tot = 1;
    while (b) {
        if (b & 1) tot = a * tot % modl;
        a = a * a % modl;
        b >>= 1;
    }
    return tot;
}

void read() {
    scanf("%d%d", &a, &b);
    if (!a) {
        printf("0\n");
        return ;
    }
    Pre();
    ll ans = 1, sum = 0;
    for (int i = 1; i <= cnt; ++ i) {
        k[i] *= b;
        if ((p[i] - 1) % modl == 0) {
            sum = (k[i] + 1) % modl;
        }
        else {
            ll x = poww(p[i], k[i] + 1) - 1;//如果a等于9901,-1之后会是-1;
            ll y = poww(p[i] - 1, modl - 2);
            sum = x * y % modl;
        }
        ans = (ans * sum) % modl;
    }
    printf("%lld\n", (ans + modl) + modl);//ans有可能是负数;
}

int main() {
    read();
    return 0;
}

标签:...,14,9901,int,2023.04,sum,T2,maxn
From: https://www.cnblogs.com/florence25/p/17319847.html

相关文章

  • 编程一小时2023.4.14
    1.#include<bits/stdc++.h>usingnamespacestd;classnumber{intfz,fm;friendnumberoperator+(number&n1,number&n2);public:number(inta=0,intb=1){fz=a;fm=b;}friendintgcd(inta,intb);friendintmin_gb(number&n1......
  • 回溯_20230414
    332.重新安排行程给定一个机票的字符串二维数组[from,to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字符自然排序返回最......
  • 2023.4.14
    1.问题描述:设计一个计算器程序,能够进行基本的加、减、乘、除运算。2.设计思路:程序需要输入两个数和一个运算符,根据运算符对两个数进行对应的运算,并输出结果。3.程序流程图:开始->输入第一个数->输入第二个数->输入运算符->根据运算符进行运算->输出结果->结束4.......
  • 20230414指定IP联网不通日志
    正常情况路由记录1<1毫秒<1毫秒<1毫秒192.168.0.121ms<1毫秒<1毫秒192.168.1.134ms3ms3ms100.69.64.14*3ms3ms211.138.190.1535***请求超时。626ms......
  • 2023.04.14 定时测试随笔 T1
    T1P2170选学霸传送门:洛谷P2170本题考察的是并查集优化背包DP,所以我们通过并查集将\(n\)个点变成\(group\)个连通块,那么每个连通块里面的点要么都选要么都不选,状态\(dp[i]\)定义为可以选\(i\)个学霸且不会抗议,算出所有可能的结果,再枚举\(1\)~\(n\),求出最接近\(m......
  • 2023年4月14日周五
    计划完成初稿前两部分,学习CRM项目,熟悉项目的代码结构背单词记得执行09点13分  写初稿11点19分  完成论文初稿第一二章11点30分  做页码修改,开始CRM项目学习16点04分  解决新增用户16点13分  解决删除用户记录已解决问题想法GPT学习路线Java基础:......
  • 解决nvm升级node v18.14.0时/lib64/libm.so.6: version 'GLIBC_2.27' not found (requ
    安装v18.14.0时的报错和解决方法1.报错[root@devops03~/.nvm]#nvminstallv18.14.0Downloadingandinstallingnodev18.14.0...Downloadinghttps://npm.taobao.org/mirrors/node/v18.14.0/node-v18.14.0-linux-x64.tar.xz...#######################################......
  • 每日会议20230414
     进度汇报:吕金帅:张博文:自周一起到现在,完成了商品表的数据库的连接,完成了高德地图导航接口的连接,在fragment中嵌入listview展示商品收益和广告收益。遇到的问题是:不知道如何记录数据库记录改变的次数,从而进行商品数量上的变化。赵纪旭: 具体目标:要实现三方数据库的统一,我们......
  • 4.14训练解题报告
    比赛传送门\(\color{white}20230413Tainrnig\)A.IceCave题意:考虑糖豆人的蜂窝迷图中的一层,走过一个正常格子就会变成洞。给定当前地板局面(抽象成\(n\timesm\)矩阵),以及起点和终点,求是否能在终点位置掉到下一层。特殊地,本题不允许停留。起点终点可以相同。\(n,m\le500\)......
  • 2023-04-14 css before after
    before在元素前,after在元素之后,使用:.or::before{width:100px;height:1px;background:#000;display:block;content:'',}.or::after{width:100px;height:1px;background:#00......