0
点赞
收藏
分享

微信扫一扫

1015 Reversible Primes (20 分)

骑在牛背上看书 2022-02-13 阅读 24

1015 Reversible Primes (20 分)

题意

每次给出两个整数,N,D,要求判断N和N在D进制下翻转后是否都是质数。

思路

素数筛判断质数,再对N在D进制下翻转。先判断N是否是素数,再判断翻转后的是否是素数,注意0和1不是质数。

代码

#include<stdio.h>
#include<string.h>

int prime[1000000];
bool number[1000000];

void Prime(int n)
{
	int count=0;
	memset(number,0,sizeof(number));
	number[1]=1;
	number[0]=1;
	for(int i=2; i<=n; i++){
		if(!number[i]){
			prime[count++]=i;
		}
		for(int j=0;j<count&&i*prime[j]<=n;j++){
			number[i*prime[j]]=1;
			if(i%prime[j]==0){
				break;
			}
		}
	}
}

int reverse(int N,int D)
{
	int x[100],cnt=0,sum=0,weight=1;
	while(N){
		x[cnt++]=N%D;
		N/=D;
	}
	for(int i=cnt-1; i>=0; i--){
		sum+=x[i]*weight;
		weight*=D;
	}
	return sum;
}

int main()
{
	int N,D,x;
	Prime(100007);
	while(scanf("%d",&N)){
		if(N<0){
			break;
		}
		scanf("%d",&D);
		if(!number[N]){
			x=reverse(N,D);
			if(!number[x]){
				printf("Yes\n");
			}else{
				printf("No\n");
			}
		}else{
			printf("No\n");
		}
	}
	return 0;
}
举报

相关推荐

0 条评论