poj2262---素数(质数)的判断


收获:一开始以为是100万的所有数字,题目要求是只要偶数,也可以分析出来,如果是给一个奇数,当我们给他大于等于3的奇数(这个数加有可能不是质数,但至少满足是奇数,至于是不是质数还要自己判断),剪出来一定是个偶数,无论如何都给不出答案,但是,题目要求输入偶数,偶数可以=奇数+奇数

因此一定会出现:

20
3   5   7   9   11  13  15  17  19
17 15 13 11  9    7    5    3    1

i<=n/2就可以了

附带素数的筛选法:

http://download.csdn.net/detail/u012203889/6484529

discuss上有种先把表给打出来,然后查表的方法,很快

http://poj.org/showmessage?message_id=341336

暴力筛选素数的方法:

按理说是将一个数n从2开始,一直除到n-1,如果其中有能被整除的,那么就不是质数

优化下,开n的根,有这样一个定理:如果说n不能被x整除,那么n也不能被x^2整除

2是下限,根号n是上限,2到根号n之间的数如果都不诶整除,那么

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int isPriOdd(int a,int b)
{
    int i;
    for(i=2;i <= sqrt(a); i++)
    {
        if(a%i == 0)
            return 0;
    }
        return 0;
    for(i=2;i <= sqrt(b); i++)
    {
        if(b%i == 0)
            return 0;
    }
    return 1;
}
int main()
{
    int n,tmp;
    while(scanf("%d",&n) != EOF)
    {
        int b,i;
        if(n==0)
            break;
        for(i=3;i<=n/2;i+=2)
        {
            b=n-i;
            tmp=isPriOdd(i,b);
            if(tmp == 1)
                break;
        }
        printf("%d = %d + %d\n",n,i,b);
    }
    return 0;
}
时间: 2024-08-25 11:29:39

poj2262---素数(质数)的判断的相关文章

poj2262 - 素数判断

筛选法: 先把N个自然数按次序排列起来. * 1不是质数,也不是合数,要划去. * 第二个数2是质数留下来,而把2后面所有能被2整除的数都划去. * 2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去. * 3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去. * 这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数. /* poj2262 - 素数判断 题目大意: 给定一个数n,把它分解成两个素数的和,在这些分解中,这两个素数

代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

package com.heima.Coding; /* 判断101-200之间有多少个素数(质数),并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数.*/ public class Test { public static void main(String[] args) { int count = 0; for (int i = 100; i < 200; i++) { for (int j = 2; j <=

判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路

定义:约数只有1和本身的整数称为质数,或称素数. 计算机或者相关专业,基本上大一新生开始学编程都会接触的一个问题就是判断质数,下面分享几个判断方法,从普通到高效. 1)直观判断法 最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可.C++代码如下: bool isPrime_1( int num ) { int tmp =num- 1; for(int i= 2;i <=tmp; i++) if(num %i==

Java打印素数(质数)

要求:打印 2 - 100000 当中的素数与非素数.(素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数) 1. 常规方式--对正整数n,如果用2到  之间的所有整数去除,均无法整除,则n为质数: // sqrt 法 public static void printPrime1(int num) { boolean[] isPrimes = new boolean[num + 1]; for (int i = 2; i < isPrimes.length; i++) { isPri

————————————————素数的快速判断方法————————————————————

1:   当n>=6   且n-1和n+1是孪生素数的话那么n一定是6的倍数. 证明:因为n-1和n+1为素数----① 所以n-1和n+1为奇数----② 所以n是偶数是2的倍数--③ 假设n不是3的倍数,得: n=3x+1或n=3x+2, 如果n=3x+1则n-1=3x这和①违背所以n≠3x+1 如果n=3x+2,zen+1=3(x+1)与①违背 所以假设不成立,既n是3的倍数又有②结论则n是6的倍数. 由上面的规律可以推出下面的结论: 如x>=1且n=6x+1或n=6x+1,那么n一定不

对素数的判断和素数个数的判断

应该说这是比较高效的解题方法了吧. 素数个数计数: class Solution { public:     int countPrimes(int n) {        bool* a = new bool[n];        for(int i=2; i*i<n; i++) {           if(!a[i]) {               for(int j=i; i*j<n; j++) {                   a[i*j] = true;          

python 求100内的素数/质数

质数(prime number)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数 1 list1=[] 2 num=0 3 4 for i in range(2,100): 5 for j in range(2,int(i**0.5)+1): 6 print(int(i**0.5)+1) 7 if i%j==0: 8 break 9 else: 10 list1.append(i) 11 num+=1 12 print(list1) 13 pr

javascript 输出 素数/质数

/* 第一种 :*/ // 声明 var i, j, arr = [] ; // 1-101 被除数 for( i =2; i < 101; i++) { // 除数 ,因为是素数,所以从2 开始,并小于被除数, 循环 for( j = 2; j < i; j++) { // 取模:如果能整除,表示非素数,跳出循环: if ( i % j === 0 ) { break; } } // 放到数组里面存起 if (i === j ) { arr.push(i); } } console.log

判断一个数是否是质数

质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,能被整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数. 如何判断一个数是否是质数: 代码1: 1 /** 2 * 判断给定的数字是否为素数(质数) 3 * @param num 4 * @return 5 */ 6 public static boolean isPrime(int num){ 7 if(num < 2){ 8 return false; 9 } 1

Java算法题2.判断101-200之间有多少个素数,并输出所有素数。

[原创 转载注明出处] 题目2:判断101-200之间有多少个素数,并输出所有素数. 思路: 素数(质数)就是除了1和它本身以外,没有其他的数可以被它整除 java代码实现: 1 package jichu; 2 3 public class jichu2 4 { 5 public static void main(String[] args) 6 { 7 //for循环遍历101-200 8 for(int i = 101; i < 200; i++) 9 { 10 boolean b = f