素数

(蓝桥杯)分解质因数

落爺英雄遲暮 提交于 2020-02-07 18:30:56
分解质因数 问题描述 求出区间[a,b]中所有整数的质因数分解。 输入格式   输入两个整数a,b。 输出格式   每行输出一个数的分解,形如k=a1 a2 a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输出 3=3 4=2 2 5=5 6=2 3 7=7 8=2 2 2 9=3 3 10=2 5 分析 一开始想的是先找出所有的素数,然后将这些素数一个个带入,用输入数据一次除这些素数,最后得到要求的因数。写完程序,代入系统,结果又超时了,运行超时是真的烦。本着不能浪费的原则,我这里还是贴出来看一看,毕竟能出结果的,就是慢了点,大家看看思路也还行。 质因数分解代码(超时) # include <iostream> using namespace std ; int k [ 10000 ] ; int jj [ 10000 ] ; int shuru [ 10000 ] ; int main ( ) { int a , b ; cin >> a >> b ; for ( int i = 0 ; i < b - a + 1 ; i ++ ) { shuru [ i ] = a + i ; } int n = 2 ; k [ 0 ] = 2 ; k [ 1 ] = 3 ; //筛选出范围内所有的素数 for ( int i = 2 ; i <=

(C++/JAVA)素数问题

此生再无相见时 提交于 2020-02-07 02:21:39
(C++/JAVA)输出101-200之间的所有素数,并输出素数的个数 C++: # include <iostream> using namespace std ; bool ISSS ( int p ) { for ( int q = 2 ; q <= sqrt ( p ) ; q ++ ) { if ( p % q == 0 ) { return false ; } } return true ; } void SUSHU ( int m , int n ) { int num = 0 ; for ( int p = m ; p <= n ; p ++ ) { if ( ISSS ( p ) == true ) { num ++ ; cout << p << " " ; } } cout << endl ; cout << num << endl ; } int main ( ) { SUSHU ( 101 , 200 ) ; } JAVA: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the

计算大数值素数

筅森魡賤 提交于 2020-02-07 00:35:12
发现运算速度和使用range()没有太大差别… from os import system def loop ( m , n , k ) : #功能与range(m, n, k)相同,防止数值过大时list占用过多空间 num = m while num < ( n - k ) : if num == m : yield m num += k else : yield num num += k def prime ( n ) : for i in loop ( 1 , n , 2 ) : #起始数值为奇数 j = 2 while j < i and i % j != 0 : if j == 2 : j += 1 else : j += 2 if j == i : yield j def main ( ) : n = 10000 print ( 2 , end = ' ' ) for num in prime ( n ) : print ( num , end = ' ' ) system ( 'pause' ) main ( ) 来源: CSDN 作者: Trxye. 链接: https://blog.csdn.net/weixin_40572034/article/details/104200361

7-53 验证“哥德巴赫猜想” (20分)

旧街凉风 提交于 2020-02-05 04:04:55
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。 输入格式: 输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。 输出格式: 在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。 输入样例: 24 输出样例: 24 = 5 + 19 #include<stdio.h> #include<math.h> int IsPrime(int n); int main() { int n; scanf("%d",&n); printf("%d = ",n); int p,q; for(int i = 2 ;i <= n ;i ++) { if(IsPrime(i)==1) { if(IsPrime(n-i)==1) { printf("%d + %d\n",i,n-i); break; } } } return 0; } int IsPrime(int n) { if(n==1) return 0; else { for(int i = 2; i <= sqrt(n); i++) { if(n%i=

E:rin和快速迭代

这一生的挚爱 提交于 2020-02-05 02:46:26
传送门 题意: 思路: 直接o(sqrt(n))求因子的个数,结束的标志就是遇到了素数,因为素数的因子只有两个 代码: # include <iostream> # include <stdio.h> # include <algorithm> # include <string.h> # include <vector> # include <math.h> # include <map> # include <queue> # include <set> using namespace std ; typedef long long ll ; const int maxn = 1e5 + 50 ; const int inf = 0x3f3f3f3f ; ll gg ( ll x ) { //求因子个数 ll ans = 0 ; for ( ll i = 1 ; i * i <= x ; i ++ ) { if ( x % i == 0 ) { if ( i * i != x ) ans + = 2 ; else ans ++ ; } } return ans ; } int pp ( ll x ) { //判断素数 int flag = 1 ; for ( int i = 2 ; i * i <= x ; i ++ ) { if ( x % i == 0 ) { flag =

求100以内的素数(c语言)

こ雲淡風輕ζ 提交于 2020-02-04 18:09:57
求100以内的素数(c语言) 素数的概念 素数:该数除1及其本身不再有其它的因数 2为最小的素数 代码: #include < stdio . h > void main ( ) { for ( int num = 2 ; num <= 100 ; num ++ ) for ( int i = 2 ; i <= num ; i ++ ) { if ( num == i ) { printf ( "%d\t" , num ) ; break ; } if ( num % i == 0 ) break ; } } 来源: CSDN 作者: 银河の恋 链接: https://blog.csdn.net/weixin_43818008/article/details/104170554

PAT乙1007:素数对猜想

僤鯓⒐⒋嵵緔 提交于 2020-02-04 16:50:29
问题描述: 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数 N (<10​5​​),请计算不超过 N 的满足猜想的素数对的个数。 输入格式: 输入在一行给出正整数 N 。 输出格式: 在一行中输出不超过 N 的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 问题分析: 这题主要思路就是把不超过N的所有的素数算出来,然后遍历一下,是否满足差为2的相邻素数,满足就在计数中+1。然后输出总数即可。这题核心在于计算素数,素数就是我们小学的时候学的那个质数,即只有1和本身是公因数的数。最笨的办法就是进行遍历相除,当前的数与从2开始一直遍历到比自己小1的那个数进行求余,当出现余数为0时,则不为素数,否则为素数。用这个方式进行求解,在问题提交时,会出现超时的问题。所以,为了提高查找素数的效率,我们只需比较到当前数的开根号即可。因为一个数的公因数都是成对出现的,开根号的情况下,只需要判断少量的参数,这样就可以提升计算效率了。 代码: #pragma warning(disable:4996) #include <stdio.h> #include <math.h> using namespace std; int

PTA1013 数素数

旧街凉风 提交于 2020-02-04 12:09:31
令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。 输出格式: 输出从 P​M​​ 到 P​N​​ 的所有素数,每 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 素数打一下表快速判断;注意输出格式,最后一行不要打两次回车 #include<stdio.h> using namespace std; int p[1000005]; int sushu[100005]; void solve() { int cnt=1; p[1]=1;//bushi sushu for(int i=2;i<1000005;i++) { if(!p[i])//sushu { sushu[cnt++]=i; for(int j=i*2;j<=1000005;j+=i) p[j]=1; } } } int main() { solve(); int n,m; int ans=0; scanf("%d %d",&n,&m); if(m>=n) { for(int i=n;i<=m;i++

7-59 梅森数 (20分)

心已入冬 提交于 2020-02-04 11:33:38
形如2​n​​−1的素数称为梅森数(Mersenne Number)。例如2​2​​−1=3、2​3​​−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2​31​​−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。 本题要求编写程序,对任一正整数n(n<20),输出所有不超过2​n​​−1的梅森数。 输入格式: 输入在一行中给出正整数n(n<20)。 输出格式: 按从小到大的顺序输出所有不超过2​n​​−1的梅森数,每行一个。如果完全没有,则输出“None”。 输入样例: 6 输出样例: 3 7 31 代码: #include<stdio.h> #include<math.h> int IsPrime(int num); int main() { int temp,cnt = 0; int n; scanf("%d",&n); for(int i = 1; i <= n ;i ++) { temp = pow(2,i)-1; //printf("temp = %d\n",temp); if(IsPrime(temp)) { printf("%d\n",temp); cnt++; } } if(cnt==0) { printf("None\n"); } return 0; } int IsPrime(int num) { int flag

数素数 (20)

梦想的初衷 提交于 2020-02-04 00:08:06
数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出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 本题格式控制哪里出了问题弄了好久,突然发现一个小技巧,为了检测行末是否有空格可以使用“-”代替空格 # include <iostream> # include <cmath> using namespace std ; int findPrime ( int n ) { int flag = 0 ; for ( int i = 2 ; i <= sqrt ( n ) ; i ++ ) { if ( n % i == 0 ) { flag = 1 ; break ; } } if ( flag == 0 ) { return 1 ; } else { return 0 ; } } int main ( ) {