筛法求素数(java)

import java.util.Scanner;
public class primeShaifa {
	public static void main(String[] args) {
		int n;
		Scanner cin = new Scanner(System.in);
		while (cin.hasNextInt()) {
			n = cin.nextInt();
			int[] array = new int[n];
			for (int i = 2; i < n; i++) {
				array[i] = i;
			}
			for (int i = 2; i < n; i++) {
				if (array[i] != 0) {
					int j, temp;
					temp = array[i];
					for (j = 2 * temp; j < n; j = j + temp) {
						array[j] = 0;
					}
					System.out.print(array[i] + " ");
				}
			}
		}
	}
}
时间: 2024-09-18 00:36:49

筛法求素数(java)的相关文章

求素数-java 求解大于Long.MAX_VALUE的五个素数。。。

问题描述 java 求解大于Long.MAX_VALUE的五个素数... 为什么运行没有结果啊!!!等着交作业呢...求一个简化的程序...至少能让我算出数字啊!!!或者大神帮我找一下错误啊...跪求啊!!!! import java.math.*; public abstract class FindFivePrime{ public static void main(String[] args){ BigDecimal i = new BigDecimal(Long.MAX_VALUE);

筛法求素数

#include <iostream> #include <vector> using namespace std; #define MAX_LEN 1000000 void getPrimeTable(bool *prime); int main() { bool prime[MAX_LEN+1]; long a, b; long i; vector<long> vec;//由于数可能很大 long t; getPrimeTable(prime); while (ci

筛法求2~1000之间的所有素数

筛法求素数首先要建立筛子,这里利用数组作筛子.下标对应于数,相应下标变量的值标志是否在筛子中:为1表示在筛子中,为.表示已被筛去,不在筛子中.然后找每一轮筛选种子,筛选种子是完成一轮筛选后的下一个最小的素数,初值为2. 对每一轮筛选种子,筛去其所有倍数,即相应下标变量的值赋值为O.倍数初值为筛选种子的2倍. 筛选完成,筛子中剩下的即为素数. 程序如下: /*程序8-14,筛法求2至1000之间的所有素数*/ main() { int a[1000];/*筛子数组*/ int i; int min

acm-区间筛法求区间内素数的个数

问题描述 区间筛法求区间内素数的个数 for(ll i = 2;i*i <=b;i++) is_prime_small[i] = true; for(ll i = 0;i <=b-a;i++) is_prime[i] = true; for(ll i = 2;i*i <=b;i++) { if(is_prime_small[i]) { for(ll j = 2*i;j*j <=b;j += i) is_prime_small[j] = false; for(ll j = max(2

Java求素数和最大公约数的简单代码示例_java

Java小例子:求素数 素数(质数)指的是不能被分解的数,除了 1 和它本身之外就没有其它数能够整除.这里是一个小例子,说明如何求取十万以内的所有素数.   素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法.不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数.如果所有小于它的素数都不能将其整除,那么它就是素数. public class Primes { public static void main(String[] args)

c++求素数和的问题,求查问题

问题描述 c++求素数和的问题,求查问题 求素数和 描述 对于给定的一个正整数序列,求它包含的所有素数的和. 输入 输入的第一行是一个整数n,在区间[1,10000]之中.后面紧跟n行,每一行是一个整数,在区间[1,100]之中. 输出 对输入的n个正整数中所有的素数求和,并把和在一行中输出. 样例输入 5 8 2 3 7 10 样例输出 12 我写的代码,自己试是对的,但提交结果有错,不是为何 #include using namespace std; int main() { int n;

如何用线性筛法求欧拉函数

前几天做了一个关于欧拉函数的题,当时就做超时了,因为我是暴力做的,后来百度了一下 线性晒法求欧拉函数,所以今天就打算系统的看一下筛法求欧拉函数的问题,该算法在可在线性时间内筛素数的同时求出所有数的欧拉函数: 先介绍一下暴力的欧拉函数: Eular(m) = m - (1-1/p1) - (1-1/p2) - ... - (1-1/pk)  [其中 p1, p2...pk为m的素因子] int Eular(int m) { int ret = m; for(int i=2; i<m; i++) {

java ee-SOS 求帮助 Java实现二手交易

问题描述 SOS 求帮助 Java实现二手交易 觉得有些对不住自己学习的这些年,想弄个二手交易市场的作业都不知如何下手,有没有个大好人愿意帮帮我,给我个思路,哪怕留下金口玉言两三句,小女子感激涕零. 解决方案 google里面搜索 site:download.csdn.net 交易 java 代码 注意我的搜索技巧.

JS实例教程:用6N±1法求素数

用6N±1法求素数任何一个自然数,总可以表示成为如下的形式之一:6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,-)显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然数有可能是素数.所以,除了2和3之外,所有的素数都可以表示成6N±1的形式(N为自然数).根据上述分析,我们可以构造另一面筛子,只对形如6 N±1的自然数进行筛选,这样就可以大大减少筛选的次数,从而进一步提高程序的运行效率和速度. 以下代码需要自然数大于10fu