素数判断2 比较简单的算法,没有技术含量

A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself. For example, the first four prime numbers are: 2, 3, 5 and 7.

Write a program which reads a list of N integers and prints the number of prime numbers in the list.

Input

The first line contains an integer N, the number of elements in the list.

N numbers are given in the following lines.

Output

Print the number of prime numbers in the given list.

Constraints

1 ≤ N ≤ 10000

2 ≤ an element of the list ≤ 108

Sample Input 1

5

2

3

4

5

6

Sample Output 1

3

Sample Input 2

11

7

8

9

10

11

12

13

14

15

16

17

Sample Output 2

4

对于算法



素数判断1中,我使用暴力代码判断素数,这无疑是花费时间最长,编写难度最易的代码,在学习的过程中,我发现变成和数学紧密相连,就比如这个素数判断的题目,运用数学方法可以使计算机更快速的跑完程序。

运行的代码

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int b=0,m,count;
for(int i=0;i<n;i++){
cin>>m;
count=1;
if(m!=2&&m%2==0)
count=0,break;
for(int i=2;i<=sqrt(m);i++)
{
if(m%2==0)
{
count=0;
break;
}
if(m*m%i==0){
count=0;
break;}
}
if(count==1&&m!=1)
b++;
}
cout<<b;
return 0; }

思考过程



素数是因子为1和本身的数, 如果数m不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt(m) ,一个小于 sqrt(m)。也就是说,判断素数只需判断2到sqrt(m)即可,即将判断次数减少一半,来缩短程序运行时间。

素数还有一个特性,就是说除了2以外的所有素数都是偶数。因此,在程序的开始提前将一半偶数排除再外也能缩短大部分的程序运行时间。另外用上面我写的程序中count?=0break能使条理更加清晰。

错误及调试

刚开始使用sqrt(m)的时候出现了一个错误,就是一组数据的输入Sample Input 2本应输出4,但是程序输出了5



但是经过调试我发现,错误的原因是因为在for循环中,i的终止条件应该是小于等于而不是小于,因为sqrt(m)也能成为一个判定的数据。



修改后,既是正确的输出程序.

#C++初学记录(素数判断2)的更多相关文章

  1. #C++初学记录(判断子串#数学结合)

    A Count Task Problem Description Count is one of WNJXYK's favorite tasks. Recently, he had a very lo ...

  2. #C++初学记录(素数判断)

    练习题目二 素数判断 A prime number is a natural number which has exactly two distinct natural number divisors ...

  3. 有关素数判断的一些算法(总结&&对比)

    素性测试是数论题中比较常用的一个技巧.它可以很基础,也可以很高级(哲学).这次主要要介绍一下有关素数判断的奇技淫巧 素数的判断主要分为两种:范围筛选型&&单个判断型 我们先从范围筛选型 ...

  4. POJ 1811 大素数判断

    数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...

  5. POJ3641 Pseudoprime numbers(快速幂+素数判断)

    POJ3641 Pseudoprime numbers p是Pseudoprime numbers的条件: p是合数,(p^a)%p=a;所以首先要进行素数判断,再快速幂. 此题是大白P122 Car ...

  6. JAVA语言的素数判断,随机数,函数调用

    近来刚学JAVA,就从JAVA写起吧,JAVA判别素数,其实方法和C/C++没什么区别,主要就是想谈一下,其中包括的3个点. (1)JAVA语言产生随机数,random函数,定义参数max的作用是给出 ...

  7. C语言 · 素数判断

     算法提高 素数判断   时间限制:1.0s   内存限制:512.0MB      编写一函数IsPrime,判断某个大于2的正整数是否为素数. 样例输入: 5样例输出:yes 样例输入: 9样例输 ...

  8. 素数判断-----埃氏筛法&欧拉筛法

    埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...

  9. 初学MillerRabin素数测试

    前言 \(MillerRabin\)素数测试是一种很实用的素数判定方法. 它只针对单个数字进行判定,因而可以对较大的乃至于\(long\ long\)范围内的数进行判定,而且速度也很快,是个十分优秀的 ...

随机推荐

  1. python2.0_s12_day9_协程&Gevent协程

    Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又 ...

  2. 【RF库Collections测试】Get Dictionary Values

    Name:Get Dictionary ValuesSource:Collections <test library>Arguments:[ dictionary ]Returns val ...

  3. 数据库客户端快捷键(oracle+sybase)

    PL/SQL: 选中单行:鼠标三连击某行,那么这一行即被选中. 执行脚本:F8

  4. WAS创建虚拟主机和传输链

    一.配置虚拟主机 1.登录控制台

  5. PHP中str_replace和substr_replace有什么区别?

    两个函数的定义:(1)str_replace() 函数替换字符串中的一些字符(区分大小写). 该函数必须遵循下列规则: 如果搜索的字符串是一个数组,那么它将返回一个数组. 如果搜索的字符串是一个数组, ...

  6. js积累

    动态加载JS文件(function (d) { var t=d.createElement("script");t.type="text/javascript" ...

  7. .net 防盗链

    Global.asax 文件中 protected void Application_BeginRequest(object sender, EventArgs e) { //判断当前请求是否是访问 ...

  8. HTTP/2笔记之错误处理和安全

    零.前言 这里整理了一下错误和安全相关部分简单记录. 一.HTTP/2错误 1. 错误定义 HTTP/2定义了两种类型错误: 导致整个连接不可使用的错误为连接错误(connection error) ...

  9. MQTT 3.1协议非严肃反思录

    前言 MQTT 3.1协议在弱网络环境下(比如2G/3G等)表现不够好,因此才有了反思. 弱网环境下表现 手机等终端在弱网络环境下丢包情况会非常明显,连接MQTT Server成功率很低.相比单纯的请 ...

  10. 【BZOJ2314】士兵的放置 树形DP

    [BZOJ2314]士兵的放置 Description 八中有N个房间和N-1双向通道,任意两个房间均可到达.现在出了一件极BT的事,就是八中开始闹鬼了.老大决定加强安保,现在如果在某个房间中放一个士 ...