题目描述
读五年级的楠楠刚学完了质数、合数、因数、质因数等概念。
他还知道了每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的质因数.把一个合数用质因数相乘的形式表示出来,叫做分解质因数.聪明爱动脑筋的楠楠突然对具有互不相同的质因数的合数产生了兴趣。例如:30=2*3*5,它有互不相同的质因数;70=2*5*7,它也有互不相同的质因数。若一个合数中所有的质因数互不相同,则把它称之为具有单纯质因数的合数。他想知道还有哪些数是单纯质因数的合数。
你现在要帮楠楠解决的问题是:已知N,依次输出N以内所有具有单纯质因数的合数。
输入格式
输入数据只一个整数N(10<=N<=100000)。
输出格式
依次输出N以内所有具有单纯质因数的合数。
输入/输出例子1
输入:
12
输出:
6 10
代码
#include<bits/stdc++.h>
using namespace std;
long long m,n,a[1000005],b[1000005],x,y,z;
int main(){scanf("%lld",&n);
for(int i=2;i*i<=n;i++)
{
if(a[i]==0)
{
for(int j=i*i;j<=n;j+=i*i)
a[j]=1;
}
}
for(int i=2;i*i<=n;i++)
{
if(b[i]==0)
{
for(int j=i*2;j<=n;j+=i)
b[j]=1;
}
}
for(int i=6;i<=n;i++)
{
if(a[i]==0&&b[i]!=0)
printf("%lld ",i);
}
return 0;
}