国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

藍(lán)橋杯——趣味素數(shù)問題(2017.2.3)

2019-11-14 11:32:55
字體:
供稿:網(wǎng)友

一、基本素數(shù)問題回顧

1. 求給定范圍start~end之間的所有素數(shù)(1<=start<end)

源代碼:

#include <stdio.h>#include <math.h>int main(){	int start,end;	int i,j,k,num,flag;	while(scanf("%d %d",&start,&end)!=EOF)	{		num=0;		for(i=start;i<=end;i++)		{			k=sqrt(i);			flag=1;			for(j=2;j<=k;j++)			{				if(i%j==0)				{					flag=0;					break;				}			}			if(flag==1)           //此處寫 j>=k+1 亦可			{				num++;				PRintf("%d ",i);				if(num%10==0)					printf("/n");			}		}		printf("/n%d~%d之間的素數(shù)個數(shù)為%d/n",start,end,num);	} 	return 0;}程序截圖:

2. 輸入一個正整數(shù)n,判斷該數(shù)是否為素數(shù)

源代碼:

#include <stdio.h>#include <math.h>int is_Prime(int n){	int i;	int flag=1;	for(i=2;i<=sqrt(n);i++)	{		if(n%i==0)		{			flag=0;			break;		}	}	return flag;}int main(){	int n;	while(scanf("%d",&n)!=EOF)	{		if(is_Prime(n))			printf("%d是素數(shù)/n",n);		else			printf("%d不是素數(shù)/n",n);	}	return 0;}

程序截圖:

3. 輸入一個正整數(shù)n,輸出第n個素數(shù)(n<=10000)

源代碼:

#include <stdio.h>#include <math.h>#define maxn 100000void Prime(int prime[],int n){	int i,j,k;	int flag,t=0;	int low,high,mid; 	for(i=2;i<=150000;i++)	{		k=sqrt(i);		flag=1;		for(j=2;j<=k;j++)		{			if(i%j==0)			{				flag=0;				break;			}		}		if(flag==1)			prime[t++]=i;	}	low=0,high=t-1;                  //因素數(shù)數(shù)組較大,用折半查找法素數(shù)數(shù)組下標(biāo),若下標(biāo)+1=n,則輸出對應(yīng)第n個素數(shù) 	while(low<=high)	{		mid=(low+high)/2;		if(mid==n)		{			printf("第%d個素數(shù)是:%d/n",n,prime[n-1]);			break;		}		else if(mid<n)			low=mid+1;		else			high=mid-1;	}	printf("/n");}int main(){	int n,prime[maxn]={0};	while(scanf("%d",&n)!=EOF)		Prime(prime,n); 	return 0;}

程序截圖:

二、哥德巴赫猜想

         輸入2000以內(nèi)不小于4的正偶數(shù)n,將其分解為兩個素數(shù)之和(即驗證哥德巴赫猜想對2000以內(nèi)的正偶數(shù)恒成立)

源代碼:

#include <stdio.h>#include <math.h>#define maxn 2000void Split(int prime[],int n)            //正偶數(shù)分解 {	int i,j,k;	int num=0,flag;	for(i=2;i<=2000;i++)	{		k=sqrt(i);		flag=1;		for(j=2;j<=k;j++)		{			if(i%j==0)			{				flag=0;				break;			}		}		if(flag==1)			prime[num++]=i;	}	for(i=0;i<num;i++)                   //表示為兩個素數(shù)之和,且前者小于后者 	{		for(j=0;j<num;j++)		{			if(n==prime[i]+prime[j] && prime[i]<=prime[j])				printf("%d=%d+%d/n",n,prime[i],prime[j]);		}	}}int main(){	int n,prime[maxn]={0};	while(scanf("%d",&n)!=EOF)		Split(prime,n);	return 0;}程序截圖:

另:控制不只一組解的情況下,輸出第一個素數(shù)最小的那組解

源代碼:

#include <stdio.h>#include <math.h>#define maxn 2000void Split(int prime[],int n){	int i,j,k;	int num=0,flag,ok;	for(i=2;i<=2000;i++)	{		k=sqrt(i);		flag=1;		for(j=2;j<=k;j++)		{			if(i%j==0)			{				flag=0;				break;			}		}		if(flag==1)			prime[num++]=i;	}	for(i=0;i<num;i++)	{		for(j=0;j<num;j++)		{			ok=0;                                            //輸出一組解的標(biāo)志 			if(n==prime[i]+prime[j] && prime[i]<=prime[j])   //發(fā)現(xiàn)符合要求的一組解,輸出之,并將ok標(biāo)志置為1 			{				printf("%d=%d+%d/n",n,prime[i],prime[j]);				ok=1;			}			if(ok==1)                                        //隨后不在查找其他符合要求的解,直接跳出內(nèi)外層循環(huán) 				break;		}		if(ok==1)			break;	}}int main(){	int n,prime[maxn]={0};	while(scanf("%d",&n)!=EOF)		Split(prime,n);	return 0;}程序截圖:

三、可逆素數(shù)

        從小到大輸出所有4位數(shù)的可逆素數(shù)

        可逆素數(shù)是指:一個素數(shù)將其各位數(shù)字的順序倒過來構(gòu)成的反序數(shù)也是素數(shù)

源代碼:

#include <stdio.h>#include <math.h>int is_Prime(int n){	int i;	int flag=1;	for(i=2;i<=sqrt(n);i++)	{		if(n%i==0)		{			flag=0;			break;		}	}	return flag;}int main(){	int i,j,wei;	int reversenum,num=0;	for(i=1000;i<=9999;i++)	{		if(is_Prime(i))		{			j=i,wei=1000,reversenum=0;			while(j>0)                                  //求一個數(shù)的“反序數(shù)”,如1234->4321 			{				reversenum+=((j%10)*wei);				j/=10;				wei/=10;			}			if(is_Prime(reversenum))			{				printf("%d -- %d    ",i,reversenum);				num++;				if(num%4==0)                           //控制每輸出4組數(shù)換一行 					printf("/n");			} 		}	}	return 0;}

程序截圖:

四、回文素數(shù)

        求出所有不超過1000的回文素數(shù)

        回文素數(shù)是指:一個整數(shù)n,其為素數(shù),且從左向右和從右向左讀數(shù)值都相同

源代碼:

#include <stdio.h>#include <math.h>int is_Prime(int n){	int i;	int flag=1;	for(i=2;i<=sqrt(n);i++)	{		if(n%i==0)		{			flag=0;			break;		}	}	return flag;}int main(){	int i,t,reversenum;	for(i=1;i<=9999;i++)	{		reversenum=0;		t=i;		while(t>0)                             //求"反序數(shù)"		{			reversenum=reversenum*10+t%10;			t/=10;		}		if(is_Prime(i))                        //i為素數(shù) 		{			if(i==reversenum)                  //且i從左向右和從右向左數(shù)值相同,輸出i 				printf("%d/n",i);		}	}	return 0;}

程序截圖:

五、孿生素數(shù)

        求出m~n之間(包括m和n)的孿生素數(shù),用(x,x+2)的形式表示

        孿生素數(shù)是指:間隔為2的兩個相鄰素數(shù)(如(1,3),(3,5),(11,13)等)

源代碼:

#include <stdio.h>#include <math.h>int is_Prime(int n){	int i;	int flag=1;	for(i=2;i<=sqrt(n);i++)	{		if(n%i==0)		{			flag=0;			break;		}	}	return flag;}int main(){	int i,m,n;	while(scanf("%d %d",&m,&n)!=EOF)	for(i=m;i<=n;i++)	{		if(is_Prime(i) && is_Prime(i+2))			printf("(%d,%d)/n",i,i+2);	}	return 0;}程序截圖:

六、梅森素數(shù)

        求出指數(shù)為n(n<20)的所有梅森素數(shù)

        梅森素數(shù)是指:形如 2^n-1 的正整數(shù),其中指數(shù)n是素數(shù),且 2^n-1 也是素數(shù)

源代碼:

#include <stdio.h>#include <math.h>int is_Prime(int n){	int i;	int flag=1;	for(i=2;i<=sqrt(n);i++)	{		if(n%i==0)		{			flag=0;			break;		}	}	return flag;}int main(){	int i,j,n;	while(scanf("%d",&n)!=EOF)	{		for(i=1;i<=n;i++)		{			j=pow(2,i)-1;			if(is_Prime(i) && is_Prime(j))				printf("pow(2,%d)=%d/n",i,j);		}	}	return 0;}

程序截圖:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 城步| 新疆| 大冶市| 乡城县| 游戏| 山丹县| 屯留县| 汝阳县| 香港| 镇平县| 兰州市| 于田县| 札达县| 吉隆县| 堆龙德庆县| 平泉县| 阳城县| 卢龙县| 饶平县| 博罗县| 密云县| 太康县| 泸州市| 偏关县| 潜江市| 婺源县| 扶沟县| 丹寨县| 盐池县| 庄河市| 万全县| 来宾市| 汕尾市| 牟定县| 辉南县| 庄浪县| 明光市| 铜陵市| 南和县| 洱源县| 巍山|