题目链接:
如果一个数。至少有三个因子是素数、。那么这个数就是prime num.30和42是前两个prime num.问你第n个这种数是谁。(1<=n<=1000)。
用质因子分解。判断每个数有多少个因子是质数。如果超过3个旧记录下来、记录前1000个。
#include#include #include #include using namespace std;typedef long long ll;#define N 5000int isprime[N];ll prime[N], nprime, factor[N], numfactor[N], ct;void makeprime() // 打出1到N的素数表。{ int i, j, temp; nprime = 0; memset(isprime, 1, sizeof(isprime)); isprime[1] = 1; temp = sqrt(N+0.0); for (i=2; i<=temp; ++i) { if (isprime[i]) { for (j=i+i; j temp) break; if (n % prime[i] == 0) { factor[++ct] = prime[i]; while(n % prime[i] == 0) { n /= prime[i]; } } } if (n != 1) { factor[++ct] = n; } return ct;}int main(){ int num[1001], cnt = 0; makeprime(); for (int i=1; ; ++i) { if (divide(i) >= 3) num[cnt++] = i; if (cnt > 1000) break; } int t, n; cin >> t; while(t--) { cin >> n; cout << num[n-1] << endl; } return 0;}