最小周期串:
如果s是ss的周期串,那么ss就可以表示成几个周期的s,
如果s是ss的最小周期串,那么s就是ss的周期串中最小的一个.
例,ZgxZgxZgxZgx的最小周期串是Zgx.
{很好理解}

给你一串数字ss,找出它的最小周期串n,求n!十进制表示的最末尾的非零数。ss的长度小于等于100。

 /*
朴素版
*/ #include<iostream>
#include<string>
using namespace std; string s;
int len=,i;
int sum2=;
int ans=;
int a[]={,,,,,,,}; //g(n)=1*3*5*7*9....*(2*n-1)
int g(int n){
if(n==) return a[];
if(n==) return a[];
sum2-=(n+)/; //2的指数减去5的指数 return (g((n+)/)*a[(n-(n+)/-)%])%;
} //f(n)=n!
int f(int n){
if(n==) return ;
sum2+=n/; //加上2的指数 return (f(n/)*g(n-n/))%;
} int main()
{
cin>>s;
for(len=;len<=s.size();len++)
if(s.size()%len==)
{
for(i=;i<s.size();++i)
if(s[i%len]!=s[i]) break;
if(i>=s.size()) break;
} int n=;
for(i=;i<len;++i)
n=n*+s[i]-''; ans=f(n);
while(sum2>)
{
sum2--;
ans*=;
ans%=;
}
while(sum2<)
{
sum2++;
ans*=;
ans%=;
} cout<<ans<<endl; // system("pause"); }
 /*
高精度版
*/ #include<iostream>
#include<string>
using namespace std; string s;
int len=,i;
int sum2[]={};
int num[]={};
int ans=;
int a[]={,,,,,,,};
int b[]={,,,}; void print(int x[]){
int i=;
for(i=;i>=;i--)
if(x[i]!=) break;
cout<<endl;
while(i>=) cout<<x[i--];
cout<<endl; } //return x==t
bool Equal(int x[],int t){
for(int i=;i>;i--)
if(x[i]!=) return false;
if(x[]==t) return true;
return false;
} //z=y+t
void add(int z[],int y[],int t){
for(int i=;i<=;++i)
z[i]=y[i];
z[]+=t;
int i=;
while(z[i]>=)
{
z[i+]+=z[i]/;
z[i]%=;
i++;
}
return ;
} //x=x-y
void Sub(int x[],int y[]){
for(int i=;i<=;++i)
{
x[i]=x[i]-y[i];
if(x[i]<) {x[i]+=;x[i+]-=;}
}
return ;
} //return (x-y-t)%m
int SubAndMod(int x[],int y[],int t,int m){
Sub(x,y);
x[]-=t;
int i=;
while(x[i]<)
{
x[i]+=;
x[i+]-=;
i++;
} int tt=;
for(int i=;i>=;i--)
{
tt=tt*;
tt=(tt+x[i])%m;
}
return tt;
} //y=x/k
void Divide(int y[],int x[],int k){
int t=;
for(int i=;i>=;i--)
{
y[i]=(t+x[i])/k;
t=(t+x[i])%k;
t*=;
}
} //g(x)=1*3*5*7*9....*(2*x-1)
int g(int x[]){
if(Equal(x,)) return a[];
if(Equal(x,)) return a[];
int y[]={},z[]={};
add(y,x,); //y=x+2
Divide(z,y,); //z=y/5 z为5的指数
Sub(sum2,z); //2的指数减去5的指数 int t=SubAndMod(x,z,,); //t=(x-(x+2)/5-1)%8
return (g(z)*a[t])%;
} //y=y+x
void Sum(int y[],int x[]){
for(int i=;i<=;++i)
{
y[i]=y[i]+x[i];
y[i+]+=y[i]/;
y[i]%=;
} } //f(x)=x!
int f(int x[]){
if(Equal(x,)) return ;
int y[]={};
Divide(y,x,); //y=x/2
Sum(sum2,y); //加上2的指数
if(x[]%==) return (f(y)*g(y))%;
int z[]={};
add(z,y,);
return (f(y)*g(z))%;
} int main()
{
cin>>s;
for(len=;len<=s.size();len++)
if(s.size()%len==)
{
for(i=;i<s.size();++i)
if(s[i%len]!=s[i]) break;
if(i>=s.size()) break;
} for(i=;i<len;++i)
num[i]=s[len-i-]-'';
ans=f(num); int z[]={};
if(!Equal(sum2,))
ans=ans*b[SubAndMod(sum2,z,,)]; ans%=;
cout<<ans<<endl;
// system("pause"); }

n!最末尾非0数的更多相关文章

  1. NYOJ1026 阶乘末尾非0 【模板】

    阶乘末尾非0 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描写叙述 我们的问题非常是简单.n! 末尾非0数是几? 比方n=5的时候,n! =120,那么n!末尾非0数是2. ...

  2. py-统计一个矩阵中每一列的非0数的个数

    1.文件类型类似于这样: 不过数据量比这个要更大一点. 2.对应上述数据的运行结果: import matplotlib.pyplot as plt with open('test.txt') as ...

  3. PHP导出Excel 数字末尾变0或小数点解决办法

    为了管理方便,查阅直观性.很多网站, 或者系统都会自带导出excel或者cvs的功能.但是很多情况下,由于数字超过15位,会被显示成0或者加小数点处理.造成这种情况是由于Excel内 置的数值有效范围 ...

  4. C++:如何删除string对象的末尾非数字字符

    功能实现: 现有一个string对象包含数字字符以及非数字字符,实现删除string对象的末尾非数字字符. 实例: 输入为"0 1 1 2 3    " 输出为"0 1 ...

  5. 求N!末尾的0的个数(找规律+递归)

    0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...

  6. matlab计算矩阵每列非0元素个数

    在统计分析中,有时候需要计算矩阵每列非0元素的个数,可以用以下方法: 先用find找到每列不为0的元素index,然后用count计数. 假设有矩阵A[M,N], 结果存在countZeros cou ...

  7. js中的0就是false,非0就是true及案例

    在处理js代码判断真假时经常会这么写. 但fun()可能得到的是数字0,这可不是表示的没有值,但是!js中的数字0就是false,非0就是true. 于是0就被无情的当做false了. 已经被这个坑过 ...

  8. JS中if判断 非空即为真 非0即为真

    1.字符串参与判断时:非空即为真判断字符串为空的方法if(str!=null && str!=undefined && str !='')可简写为if(!str){   ...

  9. 2017-12-15python全栈9期第二天第七节之x or y ,x 为 非 0时,则返回x

    #!/user/bin/python# -*- coding:utf-8 -*-# x or y ,x 为 非 0时,则返回xprint(1 or 2)print(3 or 2)print(0 or ...

随机推荐

  1. 牛逼的postman,分类管理更好用

  2. poj 3662 Telephone Lines(最短路+二分)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6973   Accepted: 2554 D ...

  3. EOJ 1501/UVa The Blocks Problem

    Many areas of Computer Science use simple, abstract domains for both analytical and empirical studie ...

  4. Html5 ajax的跨域请求

    1.XMLHttpRequest升级版已经实现了跨域请求.不过需要在后台设置:header("Access-Control-Allow-Origin:http://www.a.com&quo ...

  5. selenium3 + python - page_source页面源码

    前言: 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息.selenium的page_source方法可以获取到页面源码. 本次以博客园为例,先爬取页面源码, ...

  6. 【区间DP】释放囚犯

    貌似和石子合并差不多 可能是我见的题太少了,所以都差不多 OK 算法分析 首先不难看出这是一道区间DP,那么,按照本蒟蒻的意思 区间DP==三个循环 for(int len=2;len<=n;l ...

  7. U - Three displays

    Problem description It is the middle of 2018 and Maria Stepanovna, who lives outside Krasnokamensk ( ...

  8. IO流遍历文件夹下所有文件问题

    import java.io.File; /** * @author 王恒 * @datetime 2017年4月20日 下午2:24:32 * @description 递归调用 * */ publ ...

  9. CSS多列布局(实例)

    前言 一列布局 二列布局 三列布局 1 一列布局 一列布局: HTML部分 <!DOCTYPE html> <html> <head> <meta chars ...

  10. [编码]ASCII、GBK、Unicode(万国码) 和 UTF-8

    American ASCII编码 (American Standard Code for Information Interchange,美国信息互换标准代码)  China    gbk编码     ...