最小周期串:
如果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. hdu 1075(字典树)

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  2. 75.培训管理-培训信息发布 Extjs 页面

    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&quo ...

  3. Coursera Algorithms week1 查并集 练习测验:2 Union-find with specific canonical element

    题目原文: Add a method find() to the union-find data type so that find(i) returns the largest element in ...

  4. codevs1288 埃及分数(IDA*)

    1288 埃及分数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在古埃及,人们使用单位分数的和(形如1/a的 ...

  5. 数据库操作通用函数,增强可重复利用性能C#,asp.net.sql2005

    using System;using System.Data;using System.Data.SqlClient; namespace com.hua..li{ /// <summary&g ...

  6. Android嵌入式(初稿)--路漫漫其修远兮,吾将上下而求索

  7. Ionic3 环境搭建以及基础配置实现(更新中)

    GitHub:https://github.com/Teloi 环境配置输入以下命令安装 Ionic (如果刚才设置了淘宝镜像源,可以使用 cnpm 代替 npm):npm install -g io ...

  8. JavaScript中变量的类型

    变量的类型是指变量的值所属的数据类型,可以是数值型.字符串型和布尔型等,因为JavaScript是一种弱类型的程序语言,所以可以把任意类型的数据赋值给变量. 下面是一个关于变量类型的例子.在这个例子中 ...

  9. C#调用FFMPEG实现桌面录制(视频+音频+生成本地文件)

    不得不说FFMPEG真是个神奇的玩意,所接触的部分不过万一.网上有个很火的例子是c++方面的,当然这个功能还是用c++来实现比较妥当. 然而我不会c++ 因为我的功能需求比较简单,只要实现基本的录制就 ...

  10. 【sqli-labs】 less3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

    实质上和less1没有多大区别,看懂了一样走流程 提交参数 加单引号 http://localhost/sqli/Less-3/?id=1' 观察报错,看near 和 at 的引号之间内容 '1'') ...