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