找出1~n内的素数
下面是今天解决的问题,输入一个n上限,找到1~n之间素数的个数,并且打印出素数,
素数:
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,
黎曼猜想:
素数在自然数中的分布问题在纯粹数学和应用数学上都是很重要的问题。素数在自然数域中分步并没有一定的规则。1859年,黎曼发表了《在给定大小之下的素数个数》的论文。这是一篇内容极其深刻不到10页的论文,他将素数的分布的问题归结为函数的问题,现在称为黎曼函数。即素数出现的频率与所谓黎曼函数紧密相关。黎曼证明了这个函数的一些重要性质,并简要地断言了其它的性质而未予证明。
在黎曼去世后的100多年中,世界上许多优秀的数学家尽了最大的努力去证明他的这些断言,如今,除了他的一个断言外,其余都按黎曼所期望的那样得到了解决。那个未解决的断言现称为“黎曼猜想”,即“素数的分布最终归结为所谓的黎曼函数的零点问题:函数位于之间的全部零点都在之上,即零点的实部都是。”许多有名的数学家曾尝试去证明这个猜想,可是至今却没有人能证明这个“黎曼猜想”!
质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。
质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。
题目分析:
题目:判断1-1000之间有多少个素数,并输出所有素数。
程序分析:
步骤1:得到1到1000之间的数,采用for(int i= 2;i<1000;i++)循环
步骤2:判断一个数是否是素数
步骤3:输出该数,并使得变量count++
步骤4:判断是否到达1000,否的话回到步骤2
变量个数: 数字本身 m, 被除数 n ,加法器 i, 计数器 count
素数定义:除了1和它本身外,不能被其他自然数整除
代码块:
import java.util.Scanner;
public class PrimeTest{
public static void main(String[] args){
//定义一个计数器用于统计素数的个数
int count =0;
//获得1~n之间的素数,输入一个n值
System.out.println("请输入一个大于2的数字作为区间上限 :");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1;i < n; i++){
if(isPrime1(i)){
System.out.print(i+"\t");
count++;
if(count%10==0){
System.out.println();
}
}
}
System.out.println("\r"+"1到"+n+"之间的素数个数\t"+count);
}
//创建一个方法用于判断一个数是否是素数
public static boolean isPrime1(int i){
//定义一个变量用于判断数是否是素数
boolean t = false;
//当数字时2的时候,是素数返回true
if(i==2){
t = true;
}
//当数字不是2的时候,进行进一步判断
for(int j = 2;j < i;j++){
if(j==(i-1)){
t = true;
}
if((i % j)==0){
break;
}
}
return t;
}
}
总结:
练习写程序的第二天,现在看到题目终于有一点思路了,虽然思路不是十分的明确。今天解决的素数的问题,使用了MyEclipse中的bug的方法去调试,然后找到方法的。
- 第二天的学习思维导图