求解大于某数的下一个素数

求解大于某数的下一个素数问题,常见于求某一范围内的所有素数,第k个素数问题中,由于素数一定是奇数,而两个相邻奇数之间一定相差2,所以只要在奇数中查找即可:代码如下

int NextPrime (int N) {
    if (N % 2 == 0)
        ++N;
    int i;
    bool NotPrime = false;
    for (; ; N += 2){
        NotPrime = true;
        for (i = 3; i*i <= N; i+=2)
            if (N % i == 0) {
                NotPrime = true;
                break;
            }
        if (!NotPrime)
            return N;
    }
}
时间: 2024-11-07 13:48:08

求解大于某数的下一个素数的相关文章

判断一个大于1的数是不是一个素数

#include<stdio.h>#include<math.h> int main(){    int i,n,r,ret;    printf("请输入一个大于1的数:\n");    scanf("%d",&n);    r=sqrt(n);    for(i=2;i<=r;i++)    {       if(n%i==0)         {             ret=0;             break; 

数字内组合得到下一个比该数大的数

# 随意输入一个数字,用该数字内的数字组合出下一个比该数大的新数.# 例如输入14321 下一个是 21134# 这类问题,除了能给出穷举可能序列,并且找出下一个大的数字外# 可以通过,人工的罗列下几个可能得数字找规律.# 例如这一题的规则是:从后至前的找第一对逆序位置,交换逆序位置的元素,并且将前逆序位置后的数字进行顺序的重排 1 #!/usr/bin/env python 2 import sys, re, os 3 def findinv( n, end ): 4 i = end 5 wh

判断一个素数能被几个9组成的数整除?

/* 判断一个素数能被几个9组成的数整除? */ #include<stdio.h> #include<math.h> #include<malloc.h> #include<string.h> main() { int n=9,i,ss; scanf("%d",&ss); for(i=1;;i++){ if(n%ss==0){ break; }else{ n=n*10+9; } } printf("%d:%d/%d==

PHP把数据传到下一个页面的4种方法

<?php /*数据存到数据库成功之后想跳转到下一个页面,PHP然后把数据也传到下一个页面 php里面当页面读取结束的时候,所有的变量将全部清空,所以需要通过别的手段来传值, */ //1.通过url参数 比如:在跳转链接上加上?id1=$id1&id2=$id2 //这个最常用,也最省资源,但传递的内容有限. ///2.保存到session.将数据保存到特定的session中,到下个页面再从session中取出 session_start(); $emailaddress = "

LinkCode 下一个排列、上一个排列

http://www.lintcode.com/zh-cn/problem/next-permutation-ii/# 原题 给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列. 如果没有下一个排列,则输出字典序最小的序列. 样例 左边是原始排列,右边是对应的下一个排列. 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1 解题思路(示例:[1,3,5,4,2]) 从后开始往前遍历,找到后一个元素大于前一个元素的时候记录前一个元素的指针(也

Leetcode31---&gt;Next Permutation(数字的下一个排列)

题目: 给定一个整数,存放在数组中,求出该整数的下一个排列(字典顺序):要求原地置换,且不能分配额外的内存 举例: 1,2,3 → 1,3,2:  3,2,1 → 1,2,3:  1,1,5 → 1,5,1:   解题思路: 1. 由于要找出整数的下一个排列,且按照字典顺序,因此要找出当前排列中需要交换的的那个位,即找到从右到左第一个不满足升序的元素的前一个元素nums[index1], 以及从右到左第一个大于nums[index1]的元素nums[index2]; 2. 交换两个元素:因为是按

LeetCode 31 Next Permutation(下一个全排列)

题目链接: https://leetcode.com/problems/next-permutation/?tab=Description Problem :寻找给定int数组的下一个全排列(要求:be in-place) 倒序查找到该数组中第一个满足后面的数字大于前面的数字的下标i (当前下标 i 指向 后面的那个比较大的数) 参考代码: package leetcode_50; /*** * * @author pengfei_zheng * 下一个全排列 */ public class S

【c语言】 给出一个大于或等于3的正整数,判断它是不是一个素数

// 给出一个大于或等于3的正整数,判断它是不是一个素数 #include <stdio.h> #include <math.h> int sushu(int x) { int i; if( x >= 3 ) { for( i = 2; i <= sqrt(x); i++ ) { if( x % i == 0 ) return 1; } return -1; } else printf("输入的数太小啦,请重新输入\n"); } int main()

已知一个排列求下一个排列(NOIP2004P4 火星人 题解)转

题目描述略) 本题题意为求给定长度为 n 的数列的后第 m 个全排列(字典序). 对于一个给定的数列 a[0 .. n-1],求其下一个字典序的全排列算法如下: 从右向左查询最大的下标 i (0 ≤ i ≤ n-1) 使得 a[i] < a[i+1]: 从左向右查询最小的元素 a[j] (i+1 ≤ j ≤ n-1) 使得 a[i] < a[j]: 交换 a[i] 和 a[j]: 逆置翻转 a[i+1 .. n-1]. 算法分析:我们可以发现,第一步求出的 i 下标表示 a[i+1 .. n-