题目链接:Square-free division (easy version)
#include<bits/stdc++.h>
using namespace std;
int s(int x)//找出质因子的幂为奇数次
{
if(x==1)
return 1;
int k=1;
for(int i=2;i*i<=x;i++)
{
int sum=0;
while(x%i==0)//找出质因子的幂的次数
{
x/=i;
sum++;
}
if(sum%2)//质因子幂为偶数不影响判断
k*=i;
}
return k*x;//返回所有质因子为奇数的乘积
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,sum=0,p;
cin>>n>>p;
map<int,int>m;
while(n--)
{
int x;
cin>>x;
int h=s(x);
if(m[h])//如果前面出现过该乘积,需要增加段数
{
sum++;
m.clear();//清空map数组
}
m[h]=1;//记录质因子幂为奇数的乘积是否存在
}
cout<<sum+1<<endl;
}
}