素数

C-歌德巴赫猜想的证明 SDUT

半世苍凉 提交于 2020-01-18 02:47:09
Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 验证“每个不小于6的偶数都是两个素数之和”,输入一个不小于6的偶数n,找出两个素数,使它们的和为n。 Input 输入一个不小于6的偶数n。 Output 找出两个素数,使它们的和为n。只需要输出其中第一个素数最小的一组数据即可。 Sample Input 80 Sample Output 80=7+73 Hint Source # include <stdio.h> # include <stdlib.h> int f ( int n ) { int i , j ; for ( i = 2 ; i < n ; i ++ ) { for ( j = 2 ; j < i ; j ++ ) //for循环为一个判断素数过程 { if ( i % j == 0 ) break ; } if ( j == i ) //如果“i”是素数,继续执行下面语句判断n-i是否为素数 { for ( j = 2 ; j < n - i ; j ++ ) { if ( ( n - i ) % j == 0 ) break ; } if ( j == n - i ) //如果n-i也为素数,则返回i的值,返回值后函数便结束继续执行; return i ; } } } int

求n以内的素数

≯℡__Kan透↙ 提交于 2020-01-17 03:25:55
# include <bits/stdc++.h> using namespace std ; bool fun ( int n ) { for ( int i = n / 2 ; i >= sqrt ( n ) ; i -- ) { if ( n % i == 0 ) { return false ; } } return true ; } int main ( ) { int n ; cin >> n ; for ( int i = 2 ; i <= n ; i ++ ) { if ( fun ( i ) ) { cout << i << endl ; } } return 0 ; } 来源: CSDN 作者: OneSeek 链接: https://blog.csdn.net/Chuang98/article/details/104010873

P1217 [USACO1.5]回文质数 Prime Palindromes

点点圈 提交于 2020-01-16 19:42:30
题目链接 先找出所有的回文数,然后再判断是否为素数。直接判断的话最后一个测数会TEL 通过查找百度百科了解回文素数的知识,两位回文素数1个,三位回文素数15个,五位回文素数93个,七位回文素数668个,九位回文素数5172个。从而可以删除大量的无用数据,我的代码只删除了8位的数据就AC了,没有用打表的方法删除更多的无用数据。 AC代码 # include <bits/stdc++.h> using namespace std ; int temp [ 10000000 ] , num ; void check ( int a ) { if ( a % 6 != 1 && a % 6 != 5 ) { return ; } for ( int i = 5 ; i <= sqrt ( a ) ; i + = 6 ) { if ( a % i == 0 || a % ( i + 2 ) == 0 ) { return ; } } printf ( "%d\n" , a ) ; } void Palindrome ( int x ) { int n = x , newed = 0 ; do { newed = newed * 10 + x % 10 ; x / = 10 ; } while ( x > 0 ) ; if ( n == newed ) { check ( n ) ; } }

C语言--判断素数

耗尽温柔 提交于 2020-01-16 03:00:35
判断素数 方法一: 课本的代码 #include<stdio.h> int prime(int n) //判断是否素数 { int j,m; m = n; for(j = 2;j <=m/2;j++){ if(m%j==0){ break; } } if(j>m/2&&m!=1) return 1;//是素数 else return 0; } int main() { int n=100; int count = 0; for(int i=1;i<=n;i++){ if(prime(i)){ count++; printf("%d\n",i); } } printf("一共有%d个素数",count); return 0; } 方法二: #include<math.h> int prime(int t){ int flag=1;//flag=1表示素数 if(t==1) flag=0; //可以用flag先标记1不是素数,不用直接当t==1时就return 0; for(int j=2;j<=sqrt(t);j++){ if(t%j==0) { flag=0; break; } } if(flag==1) return 1; else return 0; } 方法三: 1到100000的数全都用0/1表示是否素数存于数组a[N]中 #include<stdio.h>

学会构造素数序列

江枫思渺然 提交于 2020-01-15 03:26:00
1 #include<iostream> 2 using namespace std; 3 #define max 100 //这里默认构造100以内的素数 4 int p[max], a[max]; 5 int main() 6 { 7 for (int i = 2; i*i < max; i++) 8 { 9 for (int j = i; j*i < max; j++) //i,j相乘得到的肯定不是素数 10 p[i*j] = 1; //数组p用来标记不是素数的元素 11 } 12 int t = 0; 13 for (int i = 2; i < max; i++) 14 { 15 if (!p[i]) 16 a[t++] = i; 17 } 18 for (int i = 0; i < t; i++) 19 cout << a[i] << " "; 20 return 0; 21 } 来源: https://www.cnblogs.com/jzwong/p/4420521.html

JAVA经典算法之求素数

帅比萌擦擦* 提交于 2020-01-13 16:51:14
什么是素数 质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 计算原理: 在一个大于1的数a和它的2倍之间(即区间(a, 2a]中)必存在至少一个素数。 java代码 : package com . skindow . algorithm . calculationPrimeNumber ; /** * @ Description :求n ~ m数之间素数得个数,并输出这些素数 * @ Author : skindow * @ CreateDate : 2020/1/13$ 14:49$ */ public class CalculationPrimeNumber { private static final Integer START_NUM = 100 ; private static final Integer END_NUM = 200 ; private static Integer PRIME_NUM = 0 ; public static void main ( String [ ] args ) { for ( int i = START_NUM ; i < END_NUM ; i ++ ) { if ( isPrime ( ( double ) i ) ) { System . out . print ( i + "," ) ;

实现求1-n之间的素数并打印

☆樱花仙子☆ 提交于 2020-01-13 05:12:03
代码 # include <stdio.h> int main ( void ) { //求1-n之间素数并打印 int n , k = 0 , count = 1 ; //count用于计数,因为2是直接输出没有判断的,所以count初始化为1. printf ( "请输入一个整数n,用于求1-n之间的素数: " ) ; scanf_s ( "%d" , & n ) ; printf ( "2 " ) ; //2就不判断了,直接输出. for ( int j = 2 ; j <= n ; j ++ ) { //从2到n循环一边,看哪些数字符合下面的条件 for ( int i = 2 ; i < j ; i ++ ) { //i是除了1和他本身之间的整数 if ( j % i == 0 ) //满足这个条件说明j可以整除i,所以j不是素数,则使用break跳出循环. break ; else if ( ( j % i != 0 ) && ( i == ( j - 1 ) ) ) //满足此条件说明已经验证到最后一个因子,将它的值赋给k k = j ; else //这个就是j不整除i,而且还没有验证到最后一个数字,则进入下一轮循环 continue ; count ++ ; printf ( "%d " , k ) ; } } printf ( "\n1-%d有%d个素数" ,

nyoj187 快速查找素数(素数打表)

别等时光非礼了梦想. 提交于 2020-01-11 04:08:36
快速查找素数 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。 输入 给出一个正整数数N(N<=2000000) 但N为0时结束程序。 测试数据不超过100组 输出 将2~N范围内所有的素数输出。两个数之间用空格隔开 样例输入 5 10 11 0 样例输出 2 3 5 2 3 5 7 2 3 5 7 11 算法分析:打素数表; 错误原因:假如n=2000000时要考虑最后的数字 View Code #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define MAXN 2000001 using namespace std; int prime[MAXN],cnt; bool isprime[MAXN]; void getprime(int n)//得到1~n间的素数 { int i,j,k,m; m=sqrt(n)+1;cnt=0; memset(isprime,true,sizeof(isprime)); isprime[0]=isprime[1]=false; prime[cnt++]=2; for(i=4;i<=n;i+=2) isprime[i]=false; for(i=3

1013 数素数

牧云@^-^@ 提交于 2020-01-10 11:19:45
#include<iostream> using namespace std; bool prim[10000000]; int isprim[1000000]; int t=0; void prime(int n) { for(int i=2; i<n; ++i) { if(!prim[i]) { isprim[t++]=i; for(int j=2*i; j<n; j+=i) prim[j]=true; } } } int main() { prime(10000000); int n,m; cin>>n>>m; int count=0; for(int i=n-1; i<m-1; ++i) { cout<<isprim[i]; count++; if(count==10) { cout<<endl; count=0; } else cout<<" "; } cout<<isprim[m-1]; return 0; } 来源: CSDN 作者: 江楚郎(已婚 链接: https://blog.csdn.net/qq_40991687/article/details/103916575

最大素因子

喜你入骨 提交于 2020-01-10 05:21:38
题解报告:NYOJ 520 最大素因子 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0. 输入 有多组测试数据,每一行输入一个数字n.(0<n<=1000000) 输出 在接下来的一行,输出结果. 样例输入 2 3 4 5 样例输出 1 2 1 3 解题思路:任何一个不小于2的正整数都可表示成若干个素数乘积的形式,因此通过枚举素数的倍数,即可求出每个数的最大素因子在素数表中排第几,简单打个表,时间复杂度大概为O(nlogn),约等于1.38e07。 AC代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 int n,pos[maxn]; 5 void init(){ 6 memset(pos,0,sizeof(pos)); 7 for(int i=2,cnt=0;i<maxn;++i){//从2开始 8 if(!pos[i]){//如果i是素数 9 cnt++; 10 for(int j=i;j<maxn;j+=i)//填充素数i的倍数的序号