luogu 4884 多少个1?
2024-08-30 10:07:13
题目描述:
给定整数K和质数m,求最小的正整数N,使得 11111⋯1(N个1)≡K(mod m)
说人话:就是 111...1111 mod m =K
题解:
将两边一起*9+1,左边就是10^ans,然后BSGS即可。
代码:
#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll k,m;
map<ll,int>mp;
ll fastadd(ll x,ll y,ll p)
{
ll as1 = x*(y>>)%p*(1ll<<)%p;
ll as2 = x*(y&((<<)-))%p;
return (as1+as2)%p;
}
ll fastpow(ll x,ll y,ll p)
{
ll ret = 1ll;
while(y)
{
if(y&)ret=fastadd(ret,x,p);
x=fastadd(x,x,p);
y>>=;
}
return ret;
}
ll F2(ll y,ll z,ll p)
{
ll ret = fastpow(y,p-,p);
return fastadd(ret,z,p);
}
ll BSGS(ll y,ll z,ll p)
{
mp[]=;
ll now = ,m = (ll)sqrt(p);
for(int i=;i<=m;i++)
{
now=fastadd(now,y,p);
if(mp.find(now)==mp.end())
{
mp[now]=i;
}
}
ll u = ;
for(int i=;i<=m+;i++)
{
ll tmp = F2(u,z,p);
if(mp.find(tmp)!=mp.end())
{
return mp[tmp]+i*m;
}
u=fastadd(u,now,p);
}
}
int main()
{
scanf("%lld%lld",&k,&m);
k = (9ll*k+1ll)%m;
printf("%lld\n",BSGS(10ll,k,m));
return ;
}
最新文章
- 在SQL Server 2016里使用查询存储进行性能调优
- 数据库是.frm,.myd,myi备份如何导入mysql (转)
- Spark Streaming官方文档学习--上
- Python--关于dict
- 淮安团购网美团联盟网赚版 v5.7
- hdu 4559 涂色游戏(对SG函数的深入理解,推导打SG表)
- jquery判断邮箱格式问题
- 在SystemOut.log中发现HMGR0152W: 检测到CPU 饥饿的消息 <;转载>;
- ASIHttpRequest或者SDWebImage给UIImageView加载图片的逻辑是什么样子的
- python 学习之爬虫练习
- DGIM
- 【教你zencart仿站 文章1至6教训 高清1280x900视频下载】[支持手机端]
- 安装 zabbix 时遇到的一个问题
- angular.run和angular.config的区别
- jdk1.7 tomcat-7安装
- SPP-net原理解读
- java如何获取一个double的小数位数
- webservice 项目中遇到的问题
- C# 类的序列化和反序列化
- 配置nginx实现windows/iis应用负载均衡(转载)
热门文章
- SpringBoot入门-15(springboot配置freemarker使用YML)
- linux 查看进程和端口
- Dexposed:android免Root无侵入Aop框架
- 题解报告:poj 3061 Subsequence(前缀+二分or尺取法)
- Person p = new Person(";zhangsan";,20);该句话都做了什么事情?
- Css 基本的规则写法
- 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法
- MySQL+PHP配置 Windows系统IIS版
- zTree树形控件讲解
- MySQL DECIMAL数据类型