【CF#303D】Rotatable Number
【题目描述】
Bike是一位机智的少年,非常喜欢数学。他受到142857的启发,发明了一种叫做“循环数”的数。
如你所见,142857是一个神奇的数字,因为它的所有循环排列能由它乘以1,2,...,6(1到它的长度)得到。循环排列意味着将该数的一些数位从尾部挪到前面。例如,12345的循环排列包括:12345,51234,45123,34512,23451.值得一提的是,允许出现前导零。因此4500123和0123450都是0012345的循环排列。你可以看到142857满足条件的原因。以下六个等式是在十进制下的。
·142857*1=142857
·142857*2=285714
·142857*3=428571
·142857*4=571428
·142857*5=714285
·142857*6=857142
现在Bike有一个问题。他将“循环数”扩展到任意进制b。如前所述,142857是十进制下的循环数。另一个例子是二进制下的0011.以下四个等式是二进制的:
·0011*1=0011
·0011*10=0110
·0011*11=1001
·0011*100=1100
他想要找出最大的b(1<b<x)使得有一个b进制下长度为n的正循环数(允许前导零)。
注意,当你将循环数乘以1到其长度的任意整数时你都应该得到一个它的循环排列。
【题解】
传送门:http://blog.csdn.net/wmdcstdio/article/details/45042353?locationNum=7
%%%%%%%%%%%%王梦迪大神
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 5000010
#define FILE "read"
typedef long long ll;
ll n,x,cnt,len,pr[MAXN],prime[MAXN],isprime[MAXN];
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
ll fast(ll a,ll b,ll mod) {ll sum=;for(;b;b>>=,a=a*a%mod)if(b&)sum=sum*a%mod;return sum;}
inline ll read()
{
ll x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void get()
{
for(ll i=;i<=MAXN-;i++)
{
if(!isprime[i]) prime[++cnt]=i;
for(ll j=;j<=cnt&&prime[j]*i<=MAXN-;j++)
{
isprime[prime[j]*i]=;
if(i%prime[j]==) break;
}
}
}
void pre(ll p)
{
ll temp=p-;
for(ll i=;i<=cnt;i++)
{
if(temp%prime[i]==) pr[++len]=prime[i];
while(temp%prime[i]==) temp/=prime[i];
}
if(temp>) pr[++len]=temp;
}
bool check(ll d,ll p)
{
if(gcd(p,d)!=) return ;
for(ll i=;i<=len;i++) if(fast(d,(p-)/(pr[i]),p)==) return ;
return ;
}
int main()
{
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=read(); x=read();
get();
if(isprime[n+]) {printf("-1\n"); return ;}
pre(n+);
for(ll i=x-;i>;i--) if(check(i,n+)) {printf("%I64d\n",i); return ;}
printf("-1\n");
return ;
}
【CF#303D】Rotatable Number的更多相关文章
- 【Leet Code】Palindrome Number
Palindrome Number Total Accepted: 19369 Total Submissions: 66673My Submissions Determine whether an ...
- 【CF#338D】GCD Table
[题目描述] 有一张N,M<=10^12的表格,i行j列的元素是gcd(i,j) 读入一个长度不超过10^4,元素不超过10^12的序列a[1..k],问是否在某一行中出现过 [题解] 要保证g ...
- 【codeforces 805D】Minimum number of steps
[题目链接]:http://codeforces.com/contest/805/problem/D [题意] 给你一个字符串; 里面只包括a和b; 让你把里面的"ab"子串全都去 ...
- 【HDU 3709】 Balanced Number (数位DP)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)
A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...
- 【CF 585E】 E. Present for Vitalik the Philatelist
E. Present for Vitalik the Philatelist time limit per test 5 seconds memory limit per test 256 megab ...
- 【35.20%】【CF 706D】Vasiliy's Multiset
time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...
- 【26.8%】【CF 46D】Parking Lot
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- 【CF 463F】Escape Through Leaf
题意 给你一棵 \(n\) 个点的树,每个节点有两个权值 \(a_i,b_i\). 从一个点 \(u\) 可以跳到以其为根的子树内的任意一点 \(v\)(不能跳到 \(u\) 自己),代价是 \(a_ ...
随机推荐
- php、打印
<!DOCTYPE HTML><html><head><meta http-equiv="content-type" content=&q ...
- CentOS6.5安装Cacti统计图乱码解决
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fengwan.blog.51cto.com/508652/1430505 这个就 ...
- ecmall公告挂件分析(转)--此挂件写法已有更新的写法。
ecmall的首页,基本上都是由挂件的形式实现的.ecmall所有的挂件程序,都在external\widgets文件下面.ecmall首页公告的插件,就是notice目录里面. 分析里面文件,con ...
- CentOS yum源设定使用方法的整理(转)
CentOS yum更新了很多版本更新,我本人认为CentOS yum很好使的文件系统,在此向大家推荐CentOS应该是做为服务器的linux的佼佼者.CentOS采用的二进制包是rpm,不过包的依赖 ...
- Python学习问题记录
1.在windows的cmd中使用open方法打开文件时,报如下错误: (unicode error) 'unicodeescape' codec can't decode bytes in posi ...
- C++直接初始化和复制初始化2
现在正式对C++中对象建立和初始化做一个总结. (1)复制初始化的基本原理 我们知道,对象在内存中的直接表象是在内存中占有一个一定大小的空间.分配空间是建立对象的第一步.但是刚刚分配的空间就像一个没有 ...
- year()+month() 不错的Idear
year(发货日期)*100+month(发货日期),可以取到年份+月份(月份不到10月的,自动补0)
- i和j的值交换的方法
方法一: int i = 3, j = 5; int c = i; i = j; j = c; 方法二: int i = 3, j = 5; int n = i + j; i = n ...
- Docker Toolbox常见错误解决方案
错误1 Error checking TLS connection: Error checking and/or regenerating the certs: There was an error ...
- 缺乏libaio包导致报The server quit without updating PID file
背景: 直接解压安装mysql5.7.18,解压mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz,直接拷贝另外一台数据库的数据目录,启动mysql过程无日志输出,报E ...