羊羊智力运动会

羊历3131年,青青草原上,羊羊族群十分繁荣昌盛,羊羊们在这里幸福地生活着。直到灰太狼带着妻子红太狼搬到对岸的森林,羊羊们才真正在现实中见到书上记载的狼。 灰太狼每天想尽办法要跨越铁栅栏抓羊,但他没想到的是,他的对手是全羊族里最聪明的喜羊羊,而且喜羊羊的背后还有智慧超群、又擅长发明的村长慢羊羊;大智若愚,馋嘴爱睡的懒羊羊;力大无比,勇敢无畏的沸羊羊;心地善良、气质非凡的美羊羊;以及温柔可爱,做事负责的暖羊羊。 善良勇敢的小羊们,凭借着智慧和勇气,一次次识破灰太狼的阴谋诡计。
为了更好地对付狼族,羊村搞了个羊羊智力运动会。老村长给参加运到会的羊羊出了一个智力题:
寻找孪生漂亮数。一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如36=2*2*3*3)则称该数为”漂亮数”。若相邻两个自然数都是“漂亮数”, 就称它们为“孪生漂亮数”, 例如8与9就是一对。
编程找出M~N之间的所有孪生漂亮数。

输入

两个正整数M和N,1=<M、N<=100000。

输出

多行,每行一组孪生漂亮数,小数在前大数在后
没找到孪生漂亮数输出no find

样例输入 Copy

【样例输入1】
1 1000
【样例输入2】
1000 5000

样例输出 Copy

【样例输出1】
8 9
288 289
675 676
【样例输出2】
no find

思路:用质因数分解的板子算一个数的质因数分解O(sqrt(n));然后判这个数有没有质因数的次数<2;满足每个次数>=2的放到数组里,最后扫一遍数组输出。总复杂度O(n*sqrt(n))

#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<vector>
using namespace std;
typedef long long LL;
const int maxn=1e5;
LL a[maxn];
LL p[maxn];
LL c[maxn];
LL  divide(LL n)
{
     LL m=0;
     for(LL i=2;i<=sqrt(n);i++)
     {
        if(n%i==0)
        {
            p[++m]=i;c[m]=0;
            while(n%i==0)n/=i,c[m]++;
        }
     }
     if(n>1)
     {
        p[++m]=n;c[m]=1;
     }
   //  for(LL i=1;i<=m;i++)
  //   {
   //     cout<<p[i]<<"^"<<c[i]<<endl;
  //   }
       for(LL i=1;i<=m;i++)
       {
            if(c[i]<2)
            {
                return 0;
            }
       }
     return  1;
}
int main(void)
{
      LL m,n;
      while(cin>>m>>n)
      {
        int cnt=1;
        for(LL i=1;i<=max(m,n)+10;i++) a[i]=0;
 
        for(LL i=m;i<=n;i++)
        {
             if(divide(i)==1)
             {
                  a[cnt++]=i;
             }
        }
        int flag=1;
        for(LL i=1;i<=cnt;i++)
        {
            if(a[i+1]-a[i]==1)
            {
                flag=0;
                cout<<a[i]<<" "<<a[i+1]<<endl;
            }
        }
        if(flag) cout<<"no find"<<endl;
      }
 return 0;
}

猜你喜欢

转载自blog.csdn.net/zstuyyyyccccbbbb/article/details/106877535
今日推荐