n!最末尾非0数
最小周期串:
如果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数的更多相关文章
- NYOJ1026 阶乘末尾非0 【模板】
阶乘末尾非0 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描写叙述 我们的问题非常是简单.n! 末尾非0数是几? 比方n=5的时候,n! =120,那么n!末尾非0数是2. ...
- py-统计一个矩阵中每一列的非0数的个数
1.文件类型类似于这样: 不过数据量比这个要更大一点. 2.对应上述数据的运行结果: import matplotlib.pyplot as plt with open('test.txt') as ...
- PHP导出Excel 数字末尾变0或小数点解决办法
为了管理方便,查阅直观性.很多网站, 或者系统都会自带导出excel或者cvs的功能.但是很多情况下,由于数字超过15位,会被显示成0或者加小数点处理.造成这种情况是由于Excel内 置的数值有效范围 ...
- C++:如何删除string对象的末尾非数字字符
功能实现: 现有一个string对象包含数字字符以及非数字字符,实现删除string对象的末尾非数字字符. 实例: 输入为"0 1 1 2 3 " 输出为"0 1 ...
- 求N!末尾的0的个数(找规律+递归)
0\'s Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...
- matlab计算矩阵每列非0元素个数
在统计分析中,有时候需要计算矩阵每列非0元素的个数,可以用以下方法: 先用find找到每列不为0的元素index,然后用count计数. 假设有矩阵A[M,N], 结果存在countZeros cou ...
- js中的0就是false,非0就是true及案例
在处理js代码判断真假时经常会这么写. 但fun()可能得到的是数字0,这可不是表示的没有值,但是!js中的数字0就是false,非0就是true. 于是0就被无情的当做false了. 已经被这个坑过 ...
- JS中if判断 非空即为真 非0即为真
1.字符串参与判断时:非空即为真判断字符串为空的方法if(str!=null && str!=undefined && str !='')可简写为if(!str){ ...
- 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 ...
随机推荐
- B1588 [HNOI2002]营业额统计 set||平衡树
平衡树题,求每个点的前驱,照例可以用set水过...(平衡树还是不会写) 又新学了一个用法: set <int> ::iterator s1; 这样s1就可以直接附为set中的地址了.但是 ...
- TCP打开文件传输(客户端code)
#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <sys/types. ...
- Spark常见编程问题解决办法及优化
目录 1.数据倾斜 2.TopN 3.Join优化 预排序的join cross join 考虑Join顺序 4.根据HashMap.DF等数据集进行filter 5.Join去掉重复的列 6.展开N ...
- (Go)07.strings与strconv的示例
package main import ( "strconv" "fmt" "strings" ) func main() { str := ...
- [Apple开发者帐户帮助]二、管理你的团队(4)离开一个团队
您可以随时离开组织的开发团队.但是,帐户持有人有法律责任,只能在指定另一个团队成员作为帐户持有人后离开团队. 如果您是Apple Developer Program中的团队成员,则可以将团队留在App ...
- go 条件语句if
一.if 语句 格式 if condition { // do something } 举例 package main import "fmt" func main(){ var ...
- [Swift]LeetCode1066. 校园自行车分配 II | Campus Bikes II
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 前端常见面试题总结part2
今天总结了几道,感觉非常有意思的题,有感兴趣的可以看下,有疑问请留言~ (答案在最后) 考察自执行函数的this指向 审题要细心 var n = 2, obj = { n:2, fn:(functio ...
- python重定向原理及实例
1. 前言 为了在Python编程中, 利用控制台信息, 我们需要对控制台输出进行接管(重定向).在Python中,控制台输出的接口是sys.stdout,通过分析print与sys.stdout之间 ...
- Django分页器及自定义分页器
Django的分页器 view from django.shortcuts import render,HttpResponse # Create your views here. from app0 ...