题目链接:
G - Non-Prime Factors
题目大意:给你一个数n,然后问你n的因子中非素数的个数。
具体思路:埃筛,把每一个数的因子直接算出来就好了。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn = 2e6 + 100; 4 int vis[maxn]; 5 int sto[maxn]; 6 void init() 7 { 8 for(int i=2; i<maxn; i++) 9 { 10 if(vis[i])// 当为非素数的时候,当前的数的非素数因子个数++ 11 sto[i]++; 12 for(int j=i*2; j<maxn; j+=i) 13 { 14 vis[j]=1; 15 if(vis[i])// 当i不是因子,当前的数2*j中一定含有i这个非素数因子 16 sto[j]++; 17 } 18 } 19 } 20 int main() 21 { 22 init(); 23 int T; 24 scanf("%d",&T); 25 while(T--) 26 { 27 int n; 28 scanf("%d",&n); 29 printf("%d\n",sto[n]+1); 30 } 31 return 0; 32 }