给出1个数n,统计2到n这n-1个数,除1以外最小的约数是多少。
例如:n = 6,2到6这5个数,
除了1之外最小约数为2的包括:2 4 6
除了1之外最小约数为3的包括:3。
除了1之外最小约数为4的没有。
除了1之外最小约数为5的包括:5。
除了1之外最小约数为6的没有。
因此,按照数量逐个输出:
3
1
0
1
0
输入
输入1个数n(n < 10000)
输出
输出n-1行,分别对应除了1以外最小约数为2到n的数字的数量。
输入样例
6
输出样例
3
1
0
1
0
TL了
#include<iostream>
#include<algorithm>
using namespace std;
int a[10000+10][100];
void solve(int n)
{
int count;
for(int i=2;i<=n;i++)
{
count=0;
for(int j=2;j<=i;j++)
{
if(i%j==0)a[i][count++]=j;
}
}
}
int main()
{
int n;
cin>>n;
solve(n);
int sum;
for(int i=2;i<=n;i++)
{
sum=0;
for(int j=2;j<=n;j++)
{
if(a[j][0]==i)sum++;
}
cout<<sum<<endl;
}
return 0;
}
n是否整除i
a[2][100]进行排序
a[i][j],i存那个数,j存约数
ac
#include<iostream>
using namespace std;
int sum[10000+10];
int fun(int n) //返回最小约数
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)return i;
}
return n;
}
int main()
{
int n;
cin>>n;
int d;
for(int i=2;i<=n;i++) //如果i是某个数的最小约数,sum[i]便++
{
d=fun(i);
sum[d]++;
}
for(int i=2;i<=n;i++)cout<<sum[i]<<endl;
return 0;
}