题目链接:Distinct Primes

如果一个数。至少有三个因子是素数、。那么这个数就是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[N];
ll prime[N], nprime, factor[N], numfactor[N], ct; void makeprime() // 打出1到N的素数表。
{
int i, j, temp;
nprime = ;
memset(isprime, , sizeof(isprime));
isprime[] = ;
temp = sqrt(N+0.0);
for (i=; i<=temp; ++i)
{
if (isprime[i])
{
for (j=i+i; j<N; j+=i)
{
isprime[j] = ;
}
}
}
for (int i=; i<N; ++i)
{
if (isprime[i]) prime[nprime++] = i;
}
} int divide(int n) // 对n进行质因子分解。ct表示质因子的个数、
{
int i;
int temp = sqrt(n+0.0);
ct = ;
memset(numfactor, , sizeof(numfactor));
for (i=; i<=nprime; ++i)
{
if (prime[i] > temp) break;
if (n % prime[i] == )
{
factor[++ct] = prime[i];
while(n % prime[i] == )
{
n /= prime[i];
}
}
}
if (n != )
{
factor[++ct] = n;
}
return ct;
} int main()
{
int num[], cnt = ;
makeprime();
for (int i=; ; ++i)
{
if (divide(i) >= ) num[cnt++] = i;
if (cnt > ) break;
}
int t, n;
cin >> t;
while(t--)
{
cin >> n;
cout << num[n-] << endl;
}
return ;
}

UVALIve 5987 素数的更多相关文章

  1. UVALive 5987

    求第n个数,该数满足至少由3个不同的素数的乘机组成 #include #include #include #include #include using namespace std; int prim ...

  2. 【筛法求素数】【推导】【组合数】UVALive - 7642 - Prime Distance

    题意:n个格子,m个球,让你把球放入某些格子里,使得所有有球的格子之间的距离(abs(i-j))均为素数 ,让你输出方案数. 只占一个格子或者两个格子显然可行. 占有三个格子的情况下,则必须保证其中两 ...

  3. HDOJ 1164 Eddy's research I(拆分成素数因子)

    Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...

  4. 素数测试算法(基于Miller-Rabin的MC算法) // Fermat素数测试法

    在以往判断一个数n是不是素数时,我们都是采用i从2到sqrt(n)能否整除n.如果能整除,则n是合数;否则是素数.但是该算法的时间复杂度为O(sqrt(n)),当n较大时,时间性能很差,特别是在网络安 ...

  5. ACM -- 算法小结(十)素数的两种打表法

    素数的两种打表法 下面介绍两种素数打表法,由于是两年前留下的笔记,所以没有原创链接~~ @_@!! 第一种疯狂打表法: #include<stdio.h> #include<math ...

  6. Help Hanzo (素数筛+区间枚举)

    Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000).     (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...

  7. Java 素数 prime numbers-LeetCode 204

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  8. 求解第N个素数

    任务 求解第 10,0000.100,0000.1000,0000 ... 个素数(要求精确解). 想法 Sieve of Eratosthenes 学习初等数论的时候曾经学过埃拉托斯特尼筛法(Sie ...

  9. 使用BitArray判断素数

    首先显示1024范围内的所有素数,然后显示输入的数是否是素数.1024 是代码中计算的素数的范围,可以修改.计算平方根,是为了确定一个基数的范围.1024的平方根是32,两个超过32 的数相乘,肯定大 ...

随机推荐

  1. POJ 3533 Light Switching Game(三维Nim积)题解

    思路:三维Nim积 代码: #include<set> #include<map> #include<stack> #include<cmath> #i ...

  2. Codeforces Round #426 (Div. 2) C. The Meaningless Game

    C. The Meaningless Game 题意: 两个人刚刚开始游戏的时候的分数, 都是一分, 然后随机一个人的分数扩大k倍,另一个扩大k的平方倍, 问给你一组最后得分,问能不能通过游戏得到这样 ...

  3. C++课程小结 继承与派生

    单继承与多重继承的区别 单继承:一个子类(派生类)只有一个父类(只由一个基类派生而成) 多继承:一个子类(派生类)有多个父类(由多个基类派生而成) 派生类的构成 (1) 从基类继承过来的成员(包括数据 ...

  4. UVa 10970 大块巧克力

    https://vjudge.net/problem/UVA-10970 题意: 把一个m行n列的矩形巧克力切成mn个1×1的方块,需要切几刀. 思路: 可以考虑用动态规划的方法去做,当然,最简单的是 ...

  5. navicat Window . MAC版常用快捷键

    navicat 结合快捷键 1.ctrl+q 打开查询窗口 2.ctrl+/ 注释sql语句 3.ctrl+shift +/ 解除注释 4.ctrl+r 运行查询窗口的sql语句 5.ctrl+shi ...

  6. 用java代码将数组元素顺序颠倒

    package test; public class Recover { public int[] reverse(int[] a) { int[] b = new int[a.length]; in ...

  7. Thunder团队Final版本控制

    Final版本控制报告 团队介绍:Thunder Check in次数 :6次. check in log(时间.人员.message.动机.其他解释) 代码贡献量.代码贡献比例以及代码作用 git链 ...

  8. android照相及照片上传

        Java代码 package com.android.cist.camera.view; import java.io.ByteArrayOutputStream; import java.i ...

  9. 更新自带pip

    想安装docker-compose发现居然找不到pip curl https://bootstrap.pypa.io/get-pip.py | python 直接sudo不行.还是提示权限不够. su ...

  10. C#中一个简单的匹配16进制颜色的正则测试

    using System; using System.Text.RegularExpressions; namespace Test { class Program { //匹配16进制颜色代码的正则 ...