题意

设A(n) = n个1,问有多少对i,j使得\(A(i^j)\equiv0(modp)\)

题解

\(A(n) = \frac{10^n-1}{9}\)

当9与p互质时\(\frac{10^n-1}{9}\%p = (10^n-1)\cdot inv[9] \% p\)

移动项得到\(10^n\equiv1(modp)\)

由欧拉定理当\(gcd(10,p) = 1\)时\(10^{\varphi(p)}\equiv1(modp)\)

那么只要找到最小的d使得\(10^d\equiv1(modp)\)

问题就转化成求有多少对i,j使得\(i^j\equiv0(modp)\)

求d只需要枚举\(\varphi(p)\)的因子就好了

对d分解\(d = p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}\)

固定j,要使\(i^j\)是d的倍数,那么i一定是\(p_1^{\lceil\frac{k_1}{j}\rceil}p_2^{\lceil\frac{k_2}{j}\rceil}\cdots p_n^{\lceil\frac{k_n}{j}\rceil}\)的倍数

设\(g_j = p_1^{\lceil\frac{k_1}{j}\rceil}p_2^{\lceil\frac{k_2}{j}\rceil}\cdots p_n^{\lceil\frac{k_n}{j}\rceil}\),答案就是\(\sum_{j=1}^mg_j\),因为\(k_i\)不会超过30,

当j大于30时的\(g_j\)都一样就不用重复计算了

还有一个问题,当p=3时,因为9与3不互质,inv[9]不存在,式子\(\frac{10^n-1}{9}\%p \Longleftrightarrow (10^n-1)\cdot inv[9] \% p\)

就不成立,需要特判,此时d取3

代码

#include <bits/stdc++.h>

using namespace std;
const int mx = 3e5+10;
typedef long long ll; ll pow_mod(ll a, ll b, ll mod) {
ll ans = 1;
while (b > 0) {
if (b & 1) ans = ans * a % mod;
a = a * a % mod;
b /= 2;
}
return ans;
} ll pow_mod(ll a, ll b) {
ll ans = 1;
while (b > 0) {
if (b & 1) ans = ans * a;
a = a * a;
b /= 2;
}
return ans;
} vector <ll> pp, k; int main() {
int T;
scanf("%d", &T); while (T--) {
ll p, n, m, d;
scanf("%lld%lld%lld", &p, &n, &m);
if (p == 2 || p == 5) {
printf("0\n");
continue;
}
d = p-1;
for (ll i = 1; i*i <= (p-1); i++) {
if ((p-1) % i == 0) {
if (pow_mod(10, i, p) == 1) {
d = min(d, i);
}
if (pow_mod(10, (p-1)/i, p) == 1) {
d = min(d, (p-1)/i);
}
}
}
if (p == 3) d = 3;
pp.clear(); k.clear();
ll ans = 0;
for (ll i = 2; i*i <= d; i++) {
if (d % i == 0) {
int tmp = 0;
while (d % i == 0) {
tmp++;
d /= i;
}
k.push_back(tmp);
pp.push_back(i);
}
}
if (d > 1) pp.push_back(d), k.push_back(1); ll tmp = 1;
for (int i = 1; i <= min(30LL, m); i++) {
tmp = 1;
for (int j = 0; j < pp.size(); j++) {
ll b = k[j] / i;
if (k[j] % i != 0) b++;
tmp *= pow_mod(pp[j], b);
}
ans += n / tmp;
}
if (m > 30) ans += n / tmp * (m-30);
printf("%lld\n", ans);
}
return 0;
}

D-Big Integer_2019牛客暑期多校训练营(第三场)的更多相关文章

  1. 2019牛客暑期多校训练营(第三场)H题目

    题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...

  2. 2019牛客暑期多校训练营(第三场)- F Planting Trees

    题目链接:https://ac.nowcoder.com/acm/contest/883/F 题意:给定n×n的矩阵,求最大子矩阵使得子矩阵中最大值和最小值的差值<=M. 思路:先看数据大小,注 ...

  3. 2019牛客暑期多校训练营(第三场) F.Planting Trees(单调队列)

    题意:给你一个n*n的高度矩阵 要你找到里面最大的矩阵且最大的高度差不能超过m 思路:我们首先枚举上下右边界,然后我们可以用单调队列维护一个最左的边界 然后计算最大值 时间复杂度为O(n*n*n) # ...

  4. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  5. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  6. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  7. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  8. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  9. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  10. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

随机推荐

  1. isMemberOfClass、isKindOfClass原理分析

    isMemberOfClass - 调用者必须是传入的类的实例对象才返回YES- 判断调用者是否是传入对象的实例,别弄反了,如 [s1 isMemberOfClass:p1] ,意思是s1是否是p1的 ...

  2. ORM详解

    讲解对象:ORM详解 作者:融水公子 rsgz 1 前言:开发流程正常只有简单的几步 0.1 配置数据库 0.2 定义模型 0.3 迁移文件 0.4 执行迁移生成数据表 0.5 使用模型类增删改查 2 ...

  3. PyQt4 在Windows下安装

    快来加入群[python爬虫交流群](群号570070796),发现精彩内容.     首先在网上下载sip文件下载完之后解压, 在Windows的开始菜单栏中进入sip的解压目录下:   在目录下面 ...

  4. 北大ACM试题分类+部分解题报告链接

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  5. python3 实现多域名批量访问特定目录(一)

    渗透测试之批量处理同一框架CMS系统漏洞 当我们做多网站的渗透测试时,会发现很多站点采用的都是同类型的CMS框架,只要我们发现一个漏洞,那么我们可以批量处理这一类站点,高效测试,如果不知道该站点的框架 ...

  6. selenium定时签到程序

    selenium定时签到程序 定时任务 # -*- coding: utf-8 -*- import time import os import sched import datetime from ...

  7. Linux基础用户管理

    一.用户管理 (一).用户和组的基本概念 Users and groups:. Every process (running program) on the system runs as a part ...

  8. 同时启动多个tomcat,端口修改

    所用Tomcat服务器都为zip 版,非安装版.以 tomcat8 为例: 安装第二个Tomcat完成后,打开 tomcat/conf/server.xml 文件,查找以下三处: 1. 修改http访 ...

  9. A solution to the never shortened to-do list

    I once told my younger sister my learning system, and the basic five doctrines of my methodology. Bu ...

  10. eclipse解决properties文件中文乱码(两种方试)

    第一种:大多数网上搜到的情况(不靠谱) 第一步:windows-->properties-->General-->Content Types-->text(如下图) 第二步:p ...