A1015

本题思路:1、记录N是否为素数的判断(开始遗漏了这处的判断)
2、将N转换为d进制记录在数组中
3、反转,实质是数组从下标0处开始遍历
4、将反转后的d进制转换为十进制
5、对转换后的十进制判断是否是素数,同时,结合最开始对N是否为素数的判断,只有二者皆为素数时,该数才是反转素数,否则不是.
注意点:1是非素数,需要进行特判

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
int store[20];
bool judgePrime(int sample){
	if(sample==1)return false;           //特判1为非素数 
	int temp=(int)sqrt(1.0*sample);
	for(int i=2;i<=temp;i++){
		if(sample%i==0)return false;
	}
	return true;
}
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,d;
	bool isPrime=false;                  //记录该数反转前是否是素数 
	while(1){
		int j=0,res=0,exp=0;
		scanf("%d",&n);
		if(n<0)break;
		isPrime=judgePrime(n);
		scanf("%d",&d);
		do{
			store[j]=n%d;
			n/=d;
			j++;
		}while(n!=0);
		for(int i=j-1;i>=0;i--){
			int temp=1;
			for(int e=1;e<=exp;e++)temp*=d;
			res+=temp*store[i];
			exp++;
		}
		if(isPrime&&judgePrime(res))printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

算法笔记中比较好的点:若n本身便是非素数,则输出No,直接跳过本次循环;通过scanf("%d",&n)!=EOF来结束输入.

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
int store[20];
bool judgePrime(int sample){
	if(sample==1)return false;           //特判1为非素数 
	int temp=(int)sqrt(1.0*sample);
	for(int i=2;i<=temp;i++){
		if(sample%i==0)return false;
	}
	return true;
}
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,d;
	while(scanf("%d",&n)!=EOF){
		if(n<0)break;
		int j=0,res=0,exp=0;
		scanf("%d",&d);
		if(!judgePrime(n)){            //判断反转前是否是素数,若反转前不是素数,则无需后续操作,直接输出No即可 
			printf("No\n");
			continue;
		}                              //注意点:该if条件判断要写在输入d之后,否则在这直接退出本循环,将导致之后的d停滞输入,放到了下一个循环中 
		do{
			store[j]=n%d;
			n/=d;
			j++;
		}while(n!=0);
		for(int i=j-1;i>=0;i--){
			int temp=1;
			for(int e=1;e<=exp;e++)temp*=d;
			res+=temp*store[i];
			exp++;
		}
		if(judgePrime(res))printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章