这题的主要就是找循环节数,这里用找字符串最小覆盖来实现,也就是n-next[n],证明在这http://blog.csdn.net/fjsd155/article/details/6866991

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
using namespace std;
__int64 mod=;
int dis[],data[],next[];
__int64 euler(__int64 n)
{
int i;
__int64 ans=;
for(i=;i*i<=n;i++)
if(n%i==)
{
ans*=i-;
n/=i;
while(n%i==)
{
ans*=i;
n/=i;
}
}
if(n>) ans*=n-;
return ans%mod;
}
int get_next(int n)
{
int i=,j=-;
next[]=-;
while(i<n)
{
if(j==-||dis[i]==dis[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
i=n-j;
if(n%i)
return n;
return i;
}
__int64 pows(__int64 a,__int64 b)
{
__int64 ans=;
a%=mod;
while(b)
{
if(b&) ans=(ans*a)%mod;
b>>=;
a=(a*a)%mod;
}
return ans%mod;
}
__int64 polya(__int64 m,__int64 n)
{
int i,j;
__int64 ans=;
for(i=;i*i<=n;i++)
{
if(n%i==)
{
ans=(ans+pows(m,n/i)*euler(i)%mod)%mod;
if(i*i!=n)
ans=(ans+pows(m,i)*euler(n/i)%mod)%mod;
}
}
return (ans*pows(n,mod-))%mod;
}
int main()
{
int n,i,j,k,t,m,s,p;
while(cin>>s>>p)
{
if(s==-&&p==-) break;
for(i=;i<p;i++) cin>>data[i];
sort(data,data+p);
for(i=;i<p;i++)
dis[i]=data[i]-data[i-];
dis[]=-data[p-]+data[];
int len=get_next(p);
printf("%I64d\n",polya(pows(s,len),p/len));
}
return ;
}

最新文章

  1. 【DS】About Stack
  2. 后端码农谈前端(CSS篇)第五课:CSS样式
  3. iOS钥匙串
  4. leetcode_438_Find All Anagrams in a String_哈希表_java实现
  5. 【Populating Next Right Pointers in Each Node II】cpp
  6. IOS性能调优系列:Analyze静态分析
  7. javascript——touch事件介绍与实例演示
  8. HTML5新增属性data-*和js/jquery之间的交互
  9. SSM-Spring-12:Spring中NameMatchMethodPointcutAdvisor名称匹配方法切入点顾问
  10. python全栈开发day113-DBUtils(pymysql数据连接池)、Request管理上下文分析
  11. 容器——list(双向链表)
  12. centos7下编译安装php7.3
  13. spring4与mongodb的集成
  14. python爬虫 urllib库基本使用
  15. Python tricks(6) -- python代码执行的效率
  16. jsPlumb学习笔记
  17. Few-Shot/One-Shot Learning
  18. Linux 下安装gmpy2
  19. PAT 1049 Counting Ones [难]
  20. Oracle VM VirtualBox虚拟机导出教程

热门文章

  1. CentOS 7 用户账户配置
  2. MySQL事务机制
  3. .Net平台Winform两个ComboBox控件绑定同一个数据源
  4. JS中的this用法详解
  5. MySQL基础操作命令
  6. 社区发现算法问题&amp;&amp;NetworkX&amp;&amp;Gephi
  7. Elastix 禁用SSL(https),还原为 http 访问
  8. Python 初学&mdash;&mdash;V_Rename(第一个完整的python程序)
  9. 十一、 BOOL类型、分支结构和关系运算符
  10. Wireshark技巧-过滤规则和显示规则