直接看代码
#include<bits/stdc++.h>
using namespace std;
int a[200005]={0};
int n;
int check(int k)
{
int m=0;//任何数与零 的gcd都是其本身
for(int i=1;i<=n-k;i++)
{
m=__gcd(m,abs(a[i]-a[i+k]));//从题干推出来的性质?对于所有abs(a[i]-a[i+k]),一定能被m整除
if(m==1)return 0;//如果是零,代表所有数相同的,如果是1,代表不存在共因数
}
return 1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
int ans=1;//分成一组
for(int i=2;i<=n;i++) if(n%i==0) ans+=check(n/i);//i代表能分成几组,n/i代表小组长度
cout<<ans<<endl;
}
return 0;
}
标签:Partitioning,原题,int,ans,Array,check
From: https://www.cnblogs.com/pure4knowledge/p/17966168