C. Partitioning the Array

原题链接

直接看代码

#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;
}

posted @   纯粹的  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示