博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
妙用next数组打表求最小循环节len
阅读量:6592 次
发布时间:2019-06-24

本文共 1342 字,大约阅读时间需要 4 分钟。

[数学]

#include 
#include
#include
#include
using namespace std;int len;int n = 1000;int next[10000];int f[50000];char s[50000];int Pow(int a, int b){ int res=1; while(b) { if(b&1) res=res*a%7; a=a*a%7; b>>=1; } return res;}void getnext(){ int j=0,k=-1; next[0]=-1; while(j
1) //周期大于1才是循环串 { cout<<"ans = "<
<
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;ll x[1005];long mod(long a,long n,long b){ //a^b mod c long t; if(n==0) return 1%b; if(n==1) return a%b; t=mod(a,n/2,b); t=t*t%b; if((n&1)==1) t=t*a%b; return t;}int main(){ string s[7]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"}; x[0]=0; for(int i=1;i<=1000;++i) x[i]=(x[i-1]%7+mod(i,i,7))%7; int next[1001]; next[0] = 0; int len=1000; for(int i = 1, q = 0; i < len; i++){ //x[]里放的是要找规律的数组 while(q > 0 && x[i] != x[q]) q = next[q-1]; if (x[i] == x[q]) q++; next[i] = q; if (q != 0 && (i + 1) % (i + 1 - q) == 0){ printf("%d\n", i+1-q); //输出的就是最大循环长度 break; } } return 0;}

转载于:https://www.cnblogs.com/Roni-i/p/9551463.html

你可能感兴趣的文章
关于在arm裸板编程时使用printf问题的解决方法
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
SSH原理与运用(一):远程登录
查看>>
动态代理解决网站字符集编码
查看>>
后台统计
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
LLDP(链路层发现协议)
查看>>
Ubuntu14 添加程序启动
查看>>
我的友情链接
查看>>
windows网络安全以及常见网络***方式
查看>>
警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
查看>>
JS字符串转换数字
查看>>
centos7-修改主机名
查看>>