UVALIve 5987 素数
2015-08-21 21:59
204 查看
题目链接:Distinct Primes
如果一个数。至少有三个因子是素数、。那么这个数就是prime num.30和42是前两个prime num.问你第n个这种数是谁。(1<=n<=1000)。
用质因子分解。判断每个数有多少个因子是质数。如果超过3个旧记录下来、记录前1000个。
View Code
如果一个数。至少有三个因子是素数、。那么这个数就是prime num.30和42是前两个prime num.问你第n个这种数是谁。(1<=n<=1000)。
用质因子分解。判断每个数有多少个因子是质数。如果超过3个旧记录下来、记录前1000个。
#include<stdio.h> #include<string.h> #include<iostream> #include<math.h> using namespace std; typedef long long ll; #define N 5000 int isprime ; ll prime , nprime, factor , numfactor , 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<N; j+=i) { isprime[j] = 0; } } } for (int i=1; i<N; ++i) { if (isprime[i]) prime[nprime++] = i; } } int divide(int n) // 对n进行质因子分解。ct表示质因子的个数、 { int i; int temp = sqrt(n+0.0); ct = 0; memset(numfactor, 0, sizeof(numfactor)); for (i=1; i<=nprime; ++i) { if (prime[i] > 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; }
View Code
相关文章推荐
- 基于CANopen DSP402的运动控制笔记
- 奥斯特发现电生磁
- 网页源码保存为文件
- JAVA泛型
- 使用Reader模拟实现BufferedReader效果
- 最短路径之弗洛伊德算法(Floyd)
- 记使用Kali linux 2.0的一些坑
- android---粒子雨效果的实现
- 用日历存储信息
- 有关eigen库在qt中的使用
- poj2253
- SystemVerilog中的$cast()向下类型转换
- Bootstrap 字体图标,下拉列表组件的使用
- Linux下C# 开发环境搭建
- SoftReference+Thread进行图片加载(一)
- GDOI2016模拟8.21总结
- xib文件的应用
- 【Linux系统编程】文件IO操作
- 在JS方法中返回多个值的三种方法
- 装饰器模式 java 414