羊羊智力運動會

羊歷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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章