素数

美素数//HDU - 4548//数论

天大地大妈咪最大 提交于 2020-01-22 15:29:28
美素数//HDU - 4548//数论 题目 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识。   问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。   给定一个区间,你能计算出这个区间内有多少个美素数吗? Input 第一行输入一个正整数T,表示总共有T组数据(T <= 10000)。 接下来共T行,每行输入两个整数L,R(1<= L <= R <= 1000000),表示区间的左值和右值。 Output 对于每组数据,先输出Case数,然后输出区间内美素数的个数(包括端点值L,R)。 每组数据占一行,具体输出格式参见样例。 Sample Input 3 1 100 2 2 3 19 Sample Output Case #1: 14 Case #2: 1 Case #3: 4 链接:https://vjudge.net/contest/351853#problem/G 思路 先筛出素数再筛出题目需要的数 代码 # include <cstdio> # include <cstring> # include <iostream> # include <string> # include <algorithm> # include

LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)

久未见 提交于 2020-01-22 07:55:25
这是悦乐书的第 311 次更新,第 332 篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762)。给定两个正整数L和R,在[L,R]范围内,计算每个整数的二进制数中1的个数,判断1的个数是否是一个素数。例如,21的二进制数是10101,其中1的个数有3个,3是一个素数。例如: 输入:L = 6,R = 10 输出:4 说明: 6 --> 110(2个1,2是素数) 7 --> 111(3个1,3是素数) 9 --> 1001(2个1,2是素数) 10 --> 1010(2个1,2是素数) 输入:L = 10,R = 15 输出:5 说明: 10 --> 1010(2个1,2是素数) 11 --> 1011(3个1,3是素数) 12 --> 1100(2个1,2是素数) 13 --> 1101(3个1,3是素数) 14 --> 1110(3个1,3是素数) 15 --> 1111(4个1,4不是素数) 注意 : L,R是[1,10 ^ 6]范围内的整数,并且L小于等于R. R减L的差最多为10000。 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。 02 第一种解法 第一步,需要先计算出整数的二进制数中1的个数

素数筛选法

核能气质少年 提交于 2020-01-22 00:06:09
如何求出小于 N 的所有质数? 筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数 在筛选的过程中,我们可以给每个数字赋值一个指标,1. 在判断过程中,把要筛掉的数字指标改为 0 ,这样循环一遍之后留下来指标仍旧为1的,就是合格的数字 # include <iostream> using namespace std ; void isPrime ( bool prime [ ] , int n ) { for ( int i = 2 ; i < n ; i ++ ) //先初始化为true prime [ i ] = true ; for ( int i = 2 ; i * i < n ; ++ i ) { for ( int j = i + 1 ; j < n ; ++ j ) { if ( j % i == 0 ) //筛选掉能被 i 整除的数 prime [ j ] = false ; } } for ( int i = 2 ; i < n ; ++ i )

筛选法求素数

≯℡__Kan透↙ 提交于 2020-01-21 17:34:00
https://blog.csdn.net/stack_queue/articlehttps://blog.csdn.net/stack_queue/article/details/53560887/details/53560887 来源: CSDN 作者: weixin_43784305 链接: https://blog.csdn.net/weixin_43784305/article/details/104060798

1411:区间内的真素数

不想你离开。 提交于 2020-01-21 05:50:16
1411:区间内的真素数 【题目描述】 找出正整数M和N之间(N不小于M)的所有真素数。 真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。 例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。 【输入】 输入两个数M和N,空格间隔,1≤M≤N≤100000。 【输出】 按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。 【输入样例】 10 35【输出样例】 11,13,17,31 代码 # include <iostream> using namespace std ; bool isprime ( int n ) { if ( n <= 1 ) return false ; for ( int i = 2 ; i * i <= n ; i ++ ) if ( n % i == 0 ) return false ; return true ; } int fs ( int n ) { int sum = 0 ; while ( n ) { sum = sum * 10 + n % 10 ; n / = 10 ; } return sum ; } bool pd ( int n ) { return isprime ( n ) && isprime ( fs ( n ) ) ; } int

输入一个数,判断是否为素数。

我怕爱的太早我们不能终老 提交于 2020-01-20 12:57:31
# include <bits/stdc++.h> using namespace std ; int n ; int main ( ) { while ( cin >> n ) { if ( n == 1 ) { cout << "NO" << endl ; continue ; } else { if ( n == 2 ) { cout << "YES" << endl ; continue ; } else { int k = 0 ; for ( int i = 2 ; i < n ; i ++ ) { if ( n % i == 0 ) { k = 1 ; continue ; } } if ( k == 1 ) cout << "NO" << endl ; else cout << "YES" << endl ; } } } return 0 ; } 当然可以写成函数,来判断一个区间内有几个素数。 来源: CSDN 作者: weixin_46130146 链接: https://blog.csdn.net/weixin_46130146/article/details/104048996

ZQOJ 1092: 素数表(函数专题)

你离开我真会死。 提交于 2020-01-20 12:39:13
题目描述 输入两个正整数m和n,输出m和n之间的所有素数。 要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。 int prime(int n) { //判断n是否为素数, 若n为素数,本函数返回1,否则返回0 } 对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。 输入 输入两个正整数m和n,m<=n,且都在int范围内。 输出 输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。 样例输入 2 6 样例输出 2 3 5 #include<stdio.h> #include<math.h> int prime(int n) { int k; int i; if (n == 1) { return 0; } k = (int)sqrt(n); for (i = 2; i <= k; i++) { if(n % i == 0) { return 0; } } return 1; } int main() { int m, n; int a; scanf("%d%d", &m, &n); for (int i = m; i <= n; i++) { a = prime(i); if (a ==

求100~200之间的全部素数

自闭症网瘾萝莉.ら 提交于 2020-01-20 02:11:15
求100~200之间的全部素数 #include<stdio.h> #include<math.h> int main() { int num; int i, j; for (num = 101; num< 200; num+=2)//2以上的偶数一定不是素数,列举奇数 { i = (int)sqrt(num); for (j = 2; j <= i; j++) { if (num % j == 0) break; } if (j > i) printf("%d是素数\n", num); else printf("%d不是素数\n", num); } } 来源: CSDN 作者: 万俟万俟 链接: https://blog.csdn.net/weixin_45371373/article/details/104043852

Python求解素数问题

怎甘沉沦 提交于 2020-01-19 22:21:27
Python求解素数问题 author: Starry锐 问题描述: 之前看到一道与素数有关的编程题,我一开始把问题分解为 定义一个函数 def is_prime(n): 判断素数并将素数存入list 用一个for循环对符合条件的素数对进行计数 下面说说我是咋想的,一开始我想面向百度编程,直接从网上找现成的判断素数函数,完成第一步。后来找了找发现,好几个网上的函数都有问题,调了半天发现要不是 error 要不就会把一些不是素数的数也放进来。 想了想还是自己写吧 于是。。。我上网复习了一下素数的概念。。。(对不起我菜) 这里用我自己的话来说一下 素数就是除了1和它本身,不能被其他数整除的数 给出我写的判断素数的函数 def is_prime ( n ) : p = [ 2 , ] #这里要初始化p,由于下边的循环无法将n=2的情况判断为素数,故先加上 if n <= 1 : p = p for i in range ( 2 , n ) : #这里无法判断n=2时是素数,因为range(2,2)无法迭代 for j in range ( 2 , i ) : #j的范围2到i-1 if i % j == 0 : break #break后边不加; if j == i - 1 : #什么原理?? #如果j迭代到i-1,即j从2到i-1都无法满足i%j==0,说明i是素数 p .

leetcode 204. 计数质数

纵饮孤独 提交于 2020-01-19 20:09:27
统计所有小于非负整数 n 的质数的数量。 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 思路 一开始以为很简单,写了个O(n^2)的超时了,然后各种优化依然超时。无奈只得看看大神的题解。 思虑很简单,我们有一个前提, 所有的非素数一定能拆成一些素数的乘积 如: 4=2x2 15=2x3x5 20=2x2x5 所以我们先假设所有的数都是素数,用排除法,所有素数的2倍及以上的数肯定都是非素数。(非素数当然也是,不过用素数计算就够了),我们能找出所有的非素数。剩下的当然就是素数了。 class Solution { public int countPrimes ( int n ) { boolean [ ] dp = new boolean [ n ] ; //默认初始化为0 Arrays . fill ( dp , true ) ; //假设所有都是素数 for ( int i = 2 ; i * i <= n ; i ++ ) { if ( dp [ i ] ) { for ( int j = 2 * i ; j < n ; j += i ) dp [ j ] = false ; } } int cnt = 0 ; for ( int i = 2 ; i < n ; i ++ ) if ( dp [ i ] ) cnt