阿里云秘钥池

对于每个正整数 nn,我们定义它的 pp 进制表示 由 mm 个非负整数 a_1, a_2, \cdots, a_ma?1??,a?2??,?,a?m?? 组成,并且这些数字满足 \displaystyle n = \sum_{i = 1}^{m}{a_i p^{i - 1}}n=?i=1?∑?m??a?i??p?i−1??,以及 0 \leq a_i < p\ (i = 1, 2, \cdots, m - 1)0≤a?i??<p (i=1,2,?,m−1) 和 1 \leq a_m < p1≤a?m??<p。

在阿里云台上,用户登录的秘钥都是由一个正整数组成。一个可被用作秘钥的正整数 nn,它的 pp 进制表示需要满足 1 \leq a_i < p\ (i = 1, 2, \cdots, m)1≤a?i??<p (i=1,2,?,m) 且 \gcd(a_i, a_{i + 1}) = 1\ (i = 1, 2, \cdots, m - 1)gcd(a?i??,a?i+1??)=1 (i=1,2,?,m−1)。比如当 p = 10p=10 时,6161 是一个合法秘钥,32163216 也是;但是当 p = 100p=100 时,6161 依旧是一个合法秘钥,32163216 却不是。

给出正整数 L, RL,R 和 pp,请你统计满足 L \leq n \leq RL≤n≤R 并且 nn 是一个合法秘钥的正整数 nn 的数量。

输入格式

第一行包含一个正整数 T(1 \leq T \leq 10^3)T(1≤T≤10?3??),表示有 TT 组测试数据。

接下来依次给出每组测试数据,每组测试数据仅一行,包含三个正整数 L, R(1 \leq L \leq R \leq 10^{18})L,R(1≤L≤R≤10?18??) 和 p(2 \leq p \leq 10^5)p(2≤p≤10?5??) ,含义见题目描述。

保证不超过 5050 组数据满足 p > 10^3p>10?3??。

输出格式

对于每组数据输出一行,包含一个整数,表示满足条件的数字数量。

样例输入

4
5 7 9
1 100 2
1 100 5
2017 2121 10

样例输出

3
6
41
10分析:考虑第一次最高位比原数小的,后面的信息可以直接用莫比乌斯得到;   这样依次按位枚举即可;代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <bitset>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <cassert>
#include <ctime>
#define rep(i,m,n) for(i=m;i<=(int)n;i++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<int,int>
#define sys system("pause")
#define ls rt<<1
#define rs rt<<1|1
#define all(x) x.begin(),x.end()
const int maxn=1e5+10;
const int N=2e2+10;
using namespace std;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qmul(ll p,ll q,ll mo){ll f=0;while(q){if(q&1)f=(f+p)%mo;p=(p+p)%mo;q>>=1;}return f;}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p%mod;p=p*p%mod;q>>=1;}return f;}
int n,m,k,t,p[maxn],mo[maxn],phi[maxn],cnt,num[20];
bool vis[maxn];
vector<ll>ret[maxn],sum[maxn];
void init()
{
    mo[1]=1;
    phi[1]=1;
    for(int i=2;i<=maxn-10;i++)
    {
        if(!vis[i])
        {
            mo[i]=-1;
            phi[i]=i-1;
            p[cnt++]=i;
        }
        for(int j=0;j<cnt&&(ll)i*p[j]<=maxn-10;j++)
        {
            vis[i*p[j]]=true;
            if(i%p[j]==0)
            {
                mo[i*p[j]]=0;
                phi[i*p[j]]=phi[i]*p[j];
                break;
            }
            mo[i*p[j]]=-mo[i];
            phi[i*p[j]]=phi[i]*(p[j]-1);
        }
    }
}
void build(int len,int bs)
{
    int i,j,k;
    rep(i,0,len)ret[i].resize(bs),sum[i].resize(bs);
    rep(i,1,bs-1)ret[1][i]=1,sum[1][i]=0;
    rep(i,1,bs-1)
    {
        for(j=i;j<bs;j+=i)sum[1][i]+=ret[1][j];
    }
    rep(i,2,len)
    {
        for(j=1;j<bs;j++)ret[i][j]=0,sum[i][j]=0;
        for(j=1;j<bs;j++)
        {
            for(k=j;k<bs;k+=j)
            {
                ret[i][k]+=mo[j]*sum[i-1][j];
            }
        }
        for(j=1;j<bs;j++)
        {
            for(k=j;k<bs;k+=j)
            {
                sum[i][j]+=ret[i][k];
            }
        }
    }
}
ll gao(ll x,int bs,int tp)
{
    int pos=0;
    while(x)num[++pos]=x%bs,x/=bs;
    if(tp)build(pos,bs);
    ll ans=0;
    int i,j;
    rep(i,1,pos-1)rep(j,1,bs-1)ans+=ret[i][j];
    for(i=pos;i>=1;i--)
    {
        for(j=1;j<num[i];j++)
        {
            if(i==pos||__gcd(num[i+1],j)==1)ans+=ret[i][j];
        }
        if(num[i]==0||(i!=pos&&__gcd(num[i],num[i+1])!=1))break;
    }
    return ans;
}
int main()
{
    int i,j;
    init();
    scanf("%d",&t);
    while(t--)
    {
        ll p,q;
        scanf("%lld%lld%d",&p,&q,&m);
        printf("%lld\n",gao(q+1,m,1)-gao(p,m,0));
    }
    return 0;
}
时间: 2024-10-10 10:22:38

阿里云秘钥池的相关文章

在阿里云、微软Windows Azure、亚马逊AWS 上使用Nginx配置http正向代理服务器

作为一个完全的Linux和Nginx双料白痴,我觉得有必要把这几天的折腾整理一下,以备以后查看. 首先我接到的是5台安装好Linux的云主机,两台阿里云,两台Azure和一台AWS.(包括云主机IP,主机名,用户名和密码) 我要做的事情: 第一步:登录云主机. 网上查很多人推荐使用Putty,这里我们老大推荐我是使用X Manager Enterprise 4. 安装好以后打开 运行xshell,建立一个新连接.点击菜单栏File中的"New",打开新建会话窗口,在窗口右侧"

开发人员异地git clone 导致阿里云报警情况分析

下文要说的这台gitlab服务器是部署在阿里云上的.阿里云根据他自己的大数据系统,如果发现某台服务器突然在不常出现的地方登录,就会自动发短信告警. 国庆期间,突然同事在工作组里发消息说阿里云提示gitlab在江西登录过一次,运维人员立马进行排查. vi /var/log/secure 找到可疑的IP,如下图: 可以看出是git账户通过秘钥登录的. 补充一下,刚开始没注意是通过秘钥登录的,以为是服务器的密码登录验证功能没有关闭导致的,就编辑/etc/ssh/sshd_config把各个安全参数都显

网站部署之~阿里云系列汇总

阿里云9折推荐码:AQAKK8,第一次购买云服务器或云数据库可享受原价9折优惠,可多人使用. 1.购买域名 阿里云系列——1.域名创建(详细步骤)---2015-11.12 http://www.cnblogs.com/dunitian/p/4957946.html 2.云服务器 阿里云系列——2.服务器购买(详细步骤)---2015-11.12 http://www.cnblogs.com/dunitian/p/4958621.html 3.网站备案 阿里云系列——3.网站备案初步核审(详细步

阿里云服务器 ECS Ubuntu系统安装配置

1. 登陆服务器 系统开通成功后手机会收到阿里云发来的短信,包含公网IP及root登录密码. WEB管理后台方式 可通过阿里云管理后台选择“连接管理终端…”进行登录 提示输入VNC密码 登录成功后显示shell界面,这时需要输入root账号及其密码登录到系统 这时候就可以进行系统操作了 但是这种方式操作比较不方便,建议使用ssh进行管理操作,阿里云系统已经自带了ssh服务,我们用ssh client连接进来即可. SSH方式远程管理 windows用户可以安装putty,通过putty进行SSH

阿里云CentOS7.3配置Java Web应用和Tomcat步骤

阿里云的Linux系统包括CentOS7.3配置了密钥对 怎样将自己ECS实例绑定密钥对,并启用秘钥: https://help.aliyun.com/document_detail/51798.html 配置前准备将8080端口开放: http://blog.csdn.net/karan_01/article/details/73798678 如果最后CentOS7.3上JDK和Tomcat配置成功,并且防火墙开放8080端口,但是外部还是访问不了Tomcat默认管理界面, 还有非常重要的一点

SSH登陆阿里云服务器出现Permission denied (publickey)错误解决方案

操作环境: 操作系统:Mac10.11.5 阿里云服务器:Ubuntu16.04 远程连接:SSH 注:首先我们已假设你已经自己生成了SSH秘钥,并已经配置到阿里云.绑定了自己的云服务器. 但是后来发现原本好使的SSH再次登陆服务器时却提示:Permission denied (publickey).的错误.解决办法是用 ssh-add privateKey ssh-add 永久将私钥添加到 Keychain 我们配置完SSH之后执行 ssh-add privateKey 将 SSH 的私钥添加

zabbix利用阿里云短信服务添加短信报警

注册阿里云,在短信服务里申请短信签名 签名名称会在脚本中用到. 申请短信模板 模板CODE会在脚本中用到,模板内容要添加参数,即zabbix传来的报警内容. 创建AccessKey 使用阿里云api需要访问秘钥,在访问控制页面-->用户管理-->新建用户 第一次生成AccessKey时会给你密码,AccessKey ID和密码脚本里会用到. 编写报警脚本 # vim /usr/lib/zabbix/alertscripts/sendSMS.py #!/usr/bin/env python2 #

视频内容谁来保护?阿里云视频加密技术架构及原理解读

视频行业的从业者--尤其是在线教育.财经分析等重视内容版权的播放平台都知道,视频安全是一个非常重要的基础需求.用户通过一次付费行为,就可以拿到付费视频的播放URL,将播放URL进行二次分发,这种行为叫做盗链:用户直接将视频下载到本地,然后再进行二次上传分发,这种行为叫做盗播,这两种行为都会给内容版权方造成十分严重的经济损失,面对日渐增多的盗链和盗播情况,我们应该怎么样去保护内容呢? 阿里云最新推出的视频加密解决方案对视频版权的保护可以从视频处理的各个环节来分别实现.阿里云通过转码.播放.分发等传

国内物联网平台初探(二) ——阿里云物联网套件

架构 数据通道 为设备和物联网应用程序提供发布和接收消息的安全通道.数据通道目前支持CCP协议和MQTT协议. 用户可以基于CCP协议实现Pub/Sub异步通信,也可以使用远程调用(RPC)的通信模式实现设备端与云端的通信. 用户也可以基于开源协议MQTT协议连接阿里云IoT,实现Pub/Sub异步通信. 安全认证&权限策略 为每个设备颁发阿里云IoT的凭证,依赖凭证才能连接阿里云IoT. 提供设备级的授权粒度,任何设备必须经过授权才能对某个Topic发布订阅消息 服务端也需要经过授权才能操作其