素数

POJ 3126-Prime Path(BFS+筛素数)

拥有回忆 提交于 2020-03-03 04:04:03
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38194 Accepted: 20384 Description The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices. — It is a matter of security to change such things every now and then, to keep the enemy in the dark. — But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know! — I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old

华为机试:素数伴侣

陌路散爱 提交于 2020-03-03 01:15:38
算法 // A_Niu26素数伴侣.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <cstring> #include <vector> using namespace std; vector<int> G[105]; int pre[105]; bool used[105]; bool dfs(int k) { for (int i = 0; i < G[k].size(); ++i) { if (used[G[k][i]] == 0) { used[G[k][i]] = 1; if (pre[G[k][i]] == 0 || dfs(pre[G[k][i]])) { pre[G[k][i]] = k; return true; } } else continue; } return false; } int main() { //求小于8000的所有质数 bool isprime[80000]; memset(isprime, 0, sizeof(isprime)); for (int i = 2; i <= 80000;i++) { int j; for (j = 2; j < i; j++) { if (i%j==0||j*j>i) { break;; } } /

欧拉函数

情到浓时终转凉″ 提交于 2020-03-03 00:28:12
欧拉函数 在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。 通式: φ ( x ) = x ∏ i = 1 n ( 1 − 1 p i ) φ(x) = x\prod_{i = 1}^n (1 - \frac{1}{p_i}) φ ( x ) = x i = 1 ∏ n ​ ( 1 − p i ​ 1 ​ ) 其中p1,p2…pn为x的所有质因数,x是不为0的整数。 注意:每种质因数只有一个。比如12=2 2 3那么φ(12)= 12 * (1-1/2)*(1-1/3)=4。 定理: 1.如果p是素数,那么φ(p )=p-1;反之如果p是一个正整数且满足φ(p )=p-1,那么p是素数。 2.如果p是素数,a是一个正整数,那么φ(p a )=p a -p a-1 。 证明:比p a 小的数有p a -1个,因为p a 只有一个素因子p,其中与p不互质的个数就是p的倍数个数p a-1 -1。 3.设n和m是互质的正整数,那么φ(nm)=φ(n)φ(m)。 因为欧拉函数是积性函数。 4.设n=p 1 a1 p 2 a2 …p k ak 为正整数n的素数幂分解,那么φ(n)=n(1-1/p 1 )(1-1/p 2 )…(1-1/p k ) (算法的核心) 5.设n是一个正整数,那么 ∑ d ∣ n φ ( d ) = n \sum_{d|n}φ(d)=n d ∣

求素数算法

删除回忆录丶 提交于 2020-03-02 21:12:47
class Program { static void Main(string[] args) { zhishuDemo(100); } /// <summary> /// 求质数(素数) /// </summary> /// <param name="n">范围</param> public static void zhishuDemo(int n) { List<int> list = new List<int>(); list.Add(2); for (int i = 3; i < n; i++) { if (i % 2 == 0) { continue; } int j = 3; while (j <= i / 2 && i % j != 0) { j += 2; } if (j > i / 2) { list.Add(i); } } list.ForEach( j => { Console.WriteLine(j); } ); Console.ReadKey(); } } 来源: https://www.cnblogs.com/shenyixin/archive/2012/12/20/2826251.html

1013 数素数 (20 分)

雨燕双飞 提交于 2020-03-01 22:12:07
题目 令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。 输出格式: 输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。 输入样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 代码 // 1013 数素数 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include<cmath> using namespace std; //判断是否是质数 bool is_prime(int number) { if (number == 1) { return false; } if (number == 2) { return true; } for (int i = 2; i <= sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } int main(){ //输入 int number_1, number_2; cin >

2.通过线程门实现Java并发编程

99封情书 提交于 2020-03-01 11:57:16
多线程素数生成器   本篇文章的示例应用程序将解决一个经典老问题,即在指定范围的数字(例如从1到100万之间)找出所有可能的素数。确切的说,我们的任务就是实现一个软件组件,利用一个方法获得指定范围内的所有素数。假定该组件的客户端要求该方法返回一个线程安全的句柄,一旦其被调用的时候可以访问结果,同时完成在后台或以异步方式找出素数的任务。还有一个条件是该操作必须提供一个阻塞方法来允许素数尽快的被访问或返回,这样该客户端就不用必须在访问结果前等待搜索完成。为了简化这个任务,对句柄返回结果的顺序没有添加限制条件。   在继续阅读本篇文章前,你应该下载本篇文章的代码文件(http://www.javaworld.com/javaworld/jw-03-2009/threadgates-src.zip),然后在自己喜欢使用的IDE中创建一个开发项目。该文件包含十个源文件,其结构如下所示: < Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ > 1    - src\ 2 3    - main\ 4 5    - java\ 6 7    - com\ 8 9    - javaworld\ 10 11    - primefinder\ 12 13

001-小于n的所有素数输出

只愿长相守 提交于 2020-02-28 13:48:56
输入 22 输出 2 是一个素数 3 是一个素数 5 是一个素数 7 是一个素数 11 是一个素数 13 是一个素数 17 是一个素数 19 是一个素数 `` # include <stdio.h> # include <math.h> int main ( ) { int n , i , j ; scanf ( "%d" , & n ) ; if ( n % 2 != 0 ) { printf ( "请输入一个偶数" ) ; } else { //输出小于n的所有质数 for ( i = 2 ; i < n ; i ++ ) { for ( j = 2 ; j <= i ; j ++ ) { if ( i % j == 0 ) { break ; } } if ( j >= i ) printf ( "%d是一个素数\n" , i ) ; } } return 0 ; } 来源: CSDN 作者: weixin_43816786 链接: https://blog.csdn.net/weixin_43816786/article/details/104554420

数论模板总结 -- 持续更新

孤者浪人 提交于 2020-02-28 12:36:58
一些常用的简单数论模板以及书中的定理 组合数取模 1:N M < 1000, 杨辉三角双循环 ,边加边取模(代码未添加取模) 1 c[1][1] = c[1][0] = 1; 2 for(int i = 2; i <= 50; i++){ 3 c[i][0] = 1; 4 for(int j = 1; j <= i; j++){ 5 c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;6   } 7 } 2. C(n, k) = C(n, k - 1) * (n - k + 1) / k ,对2~maxn的逆元打表后,利用这个公式可以O(n)时间内求出C(n, k) 1 void getcom(int x){ 2 c[0] = c1[0] = 1; c[1] = x; c1[1] = n - x; 3 for(int i = 2; i <= x; i++) 4 // inv[i] 指i的逆元,可以使用扩展gcd打表 5 c[i] = c[i - 1] % mod * (x - i + 1) % mod * inv[i] % mod; 6 } GCD求最大公约数 1 //欧几里得算法,gcd() 2 int gcd(int a, int b){ 3 return b == 0 ? a: gcd(b, a%b); 4 } 扩展欧几里得算法

线性素数筛 函数

感情迁移 提交于 2020-02-28 00:52:19
//下标为数字, 数值判定是否为为素数, int check [ 100000 ] = { 0 } ; //0是,1不是, 假定全是素数。 int prime [ 100000 / 2 ] ; //循序保存从2开始的素数数组 int prime_num = 0 ; //素数个数,结果要减一 void find_prime ( int n ) { for ( int i = 2 ; i <= n ; i ++ ) //寻找[2, n]的素数 { if ( check [ i ] == 0 ) //如果当前数标记为0, 即不是合数 prime [ prime_num ++ ] = i ; //则将该数添加到素数集合prime数组 for ( int j = 0 ; j < prime_num && i * prime [ j ] < n ; j ++ ) //再将某些是该素数的倍数的数字标记为合数 { check [ i * prime [ j ] ] = 1 ; //i*已有的素数集合 if ( i % prime [ j ] == 0 ) //关键 break ; } } } 测试 # include <iostream> # include <cstdio> using namespace std ; int check [ 20005 ] ; //基数桶 int prime [

单片机常用的14个C语言算法,看过的都成了大神!

a 夏天 提交于 2020-02-27 13:30:15
算法(Algorithm): 计算机解题的基本思想方法和步骤。 算法的描述: 是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在数组x[10]。 二、求两个整数的最大公约数、最小公倍数 分析: 求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。 例如: 求 m="14" ,n=6 的最大公约数. m