最小周期串:
如果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. Android中Calendar类的用法总结

    Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了. 在获取时间之前要先获得 ...

  2. 杂项-Java:自定义标签

    ylbtech-杂项-Java:自定义标签 1.返回顶部 1. 一般我们说自定义标签是指JSP自定义标签.自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码.自定义标签是可重用的组 ...

  3. 92. extjs specialkey监听回车按键

    转自:http://blog.sina.com.cn/s/blog_647a022e0101401n.html 1 监听表单字段事件: Ext使得对用户某个动作的监听特别简单,诸如单击某个元素或者按下 ...

  4. Django day11(一) ajax 文件上传 提交json格式数据

    一: 什么是ajax? AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互 ...

  5. Django day03 orm介绍

    一:orm介绍 就是对象关系映射,python当中的类能够对应到数据库当中的某一个表(一个类对应一个表),一个类的对象对应着数据库中的一条记录,类当中的某个字段对应着数据库当中表的字段,字段拥有不同的 ...

  6. oen /var/run/nginx.pid failed

    nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory) [root@TES ...

  7. python 5:str(某一变量)(将其他数字解释为字符串)

    age = messege = "Your's age is " + str(age) #将其他数字更改为字符串 print(messege) 运行结果应该是: Your's ag ...

  8. html body中的标签2

    一.列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: ul:unordered list,“无序列表”的意思. li:lis ...

  9. mybatis 传map参数

    第一步在你的mapper写上: List<WeixinUserLocationList> findweixinUserLocations(@Param("params" ...

  10. 拖入浏览器读取文件demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...