竞赛讨论区 > 求指教
头像
Mrnobodydx
发布于 2022-05-14 17:07
+ 关注

求指教

求求各位大佬指教
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a,b,e;
int f[N];//存的数
int ans;

struct node{
  int yz[N][2];
  int num;
  int no;
}dx[N];

void divide(int x)//i  底数  s   指数
{
    e=1;
    for(int i=2;i<=x/i;i++) 
    {                         
        if(x%i==0)   
        {
            int s=0;   
            while(x%i==0)
            {
                x/=i;
                s++;
            }
            
            dx[b].yz[e][0]=i;
            if(s/2==0) dx[b].yz[e][1]=s;
            e++;
        }
    }
    if(x>1) 
    {
        //x    1 最后一个 质因数   次数为一
        dx[b].yz[e][0]=x;
        dx[b].yz[e][1]=1;
    }
    e++;
    for(int j=1;j<e;j++)
    {
        dx[b].yz[e][2]+=dx[b].yz[j][0]^(dx[b].yz[j][1])%2;
    }
    f[dx[b].yz[e][2]]++;
}


int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
      cin>>dx[i].num;
      a=dx[i].num;
      b=i;
      dx[i].no=i;
      divide(a);
    }
    for(int i=1;i<=n;i++)
    {
        if(f[i]!=0)
            ans++;
    }
    cout<<ans;
    return 0;
}


全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐