簡體   English   中英

檢查數組中索引小於該元素的元素的倍數

[英]check number of multiples of the element in array having index smaller than that element

問題描述:

你得到一個序列A1,A2,…,AN 對於每個有效i ,元素A_i的星值是有效索引j<i的數量,使得A_j可以被A_i整除。 找到給定序列中的最大星值。

我的嘗試:
我已經嘗試過一種方法,可以在數組中找到最大元素,直到第i個索引(比如MAX_i )。 我為所有元素保留一個計數數組f[] 我正在從A_i迭代到MAX_i並以A_i的倍數迭代並計算可被A_i整除的元素數ans=ans+f[element]

  long long int n,key,m=-1,ans=0,star_max=-1;
  int f[1000004];
  memset(f, 0, sizeof(f));
  scanf("%lld", &n);
  for (int i = 0; i < n; ++i)
  {
      scanf("%lld", &key);
      ans=0;
      for(long long int i=key;i<m;i+=key)
      {
          ans+=f[i];
      }
      if(ans > star_max)
        star_max=ans;
      f[key]++;
      if (a[i] > m)
        m=a[i];
  }
  cout<<star_max;

任何 O(N) 或 O(NlogN) 方法都值得贊賞。

  long long int N;
  long long int c[1000006],val,max_star=-1;
  memset(c, 0, sizeof(c));
  scanf("%lld", &N);
  for (int i = 0; i < N; ++i)
  {
      scanf("%lld", &val);
      if(c[val] > max_star)
        max_star=c[val];
      long long int s=sqrt(val);
      for(int j=1;j<=s;j++)
      {
          if(val%j == 0)
          {
              c[j]++;
              long long int r=val/j;
              if(r != j)
              {
                  c[r]++;
              }
          }
      }
  }
    printf("%lld",max_star);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM