羊歷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;
}