小明的老师在信息学课堂上讲了有关分解质因数的知识。例如12可以分解质因数:12=2×2×3,60=2×2×3×5等等。小明发现,有些数字分解出来的质因数的个数也是该数字的质因数,例如12分解出来的质因数有3个,3是12的质因数;60分解出来的质因数有4个,但4不是60的质因数。他觉得很有趣,想求出不大于n的所有这样的数字。你能帮帮他吗?
输入格式
一行,一个整数n。
输出格式
若干行,每行一个数,要求按照从小到大的顺序输出。
输入/输出例子1
输入:
12
输出:
4
6
10
12
样例解释
【样例说明】
样例1中,4可以分解2个质因数,2是4的质因数;6可以分解2个质因数,2是6的质因数;10可以分解2个质因数,2是10的质因数;12可以分解3个质因数,3是12的质因数。
【数据范围】
对于50%的数据,2≤n≤1000;
对于80%的数据,2≤n≤10000;
对于100%的数据,2≤n≤100000。
具体代码
#include<bits/stdc++.h>
using namespace std;
int n,a[100001],b[100001],c;
void zs(void)
{
for(int i=2;i<=100000;i++)
{
if(a[i]==0)
{
b[++c]=i;
for(int j=i+i;j<=100000;j+=i)
a[j]=1;
}
}
}
bool zys(int t)
{
int len=0,x=t;
for(int i=1;i<c;i++)
{
while(t%b[i]==0)
{
len++;
t=t/b[i];
}
if(t==1)break;
}
if(len==0)return false;
if(x%len==0&&a[len]==0&&len!=1)
{
return true;
}
return false;
}
int main(){
zs();
cin>>n;
for(int i=2;i<=n;i++)
{
if(zys(i))
{
cout<<i<<endl;
}
}
return 0;
}