zoukankan      html  css  js  c++  java
  • PAT A1015 Reversible Primes (20分) [素数 质数 进制转换]

    题目

    题目链接
    已知一个十进制数n,和基数m,判断 n是否为质数;且n转换为m进制并反转后对应的十进制数是否为质数

    解题思路

    1 质数判断
    2 进制转换

    易错点

    1 输入的不一定为质数,题目要求判断两个内容: n是否为质数;n转换为m进制并反转后对应的十进制数是否为质数
    2 m<=10,所以十进制进行转换后,一定不会出现字母

    单词语法

    negative 负数
    positive 正数
    reversible 可逆的

    代码

    Code 01

    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    /*
    	1 进制转换
    	2 质数判别
    */
    // 十进制转换到其他进制 - 10进制以内
    string  convert(int x,int r) {
    	string y;
    	int temp;
    	do {
    		temp=x%r; //题目已知temp一定小于10
    		if(temp>=10)y+=temp-10+'A';
    		else y+=temp+'0';
    		x/=r;
    	} while(x!=0);
    	return y;//不需反转,因为题目中就是求反转后是否是质数
    }
    // 其他进制转十进制
    int r_convert(string y, int r) {
    	int index =0,sum=0,temp;
    	for(int i=y.length()-1; i>=0; i--) {
    		temp = isdigit(y[i])?y[i]-'0':y[i]-'A'+10;
    		sum+=temp%10*pow(r,index++);
    	}
    	return sum;
    }
    // 素数判别
    bool isPrime(int x){
    	if(x<=1)return false;
    	int sqr = (int)sqrt(1.0*x); 
    	for(int i=2;i<=sqr;i++){
    		if(x%i==0)return false;
    	}
    	return true;
    } 
    int main(int argc,char * argv[]) {
    	int n,d;
    	while(1) {
    		scanf("%d",&n);
    		if(n<0)break;
    		scanf("%d",&d);
    		if(!isPrime(n)){
    			printf("No
    ");
    			continue;
    		}
    		int temp = r_convert(convert(n,d),d);
    		if(isPrime(temp))printf("Yes
    ");
    		else printf("No
    ");
    	}
    	return 0;
    }
    

    Code 02

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    bool isPrime(int n) {
    	if(n<=1)return false;
    	int sqr=(int)sqrt(1.0*n);
    	for(int i=2; i<=sqr; i++) {
    		if(n%i==0)return false;
    	}
    	return true;
    }
    int main(int argc, char * argv[]) {
    	int n,radix;
    	while(scanf("%d",&n)!=EOF) {
    		if(n<0)break;
    		scanf("%d",&radix);
    		if(isPrime(n)==false){
    			printf("No
    ");
    			continue;
    		}
    		// 进制转换
    		int index=0,d[111]={0};
    		do{
    			d[index++]=n%radix;
    			n/=radix;
    		} while(n!=0);
    		for(int i=0;i<index;i++){
    			n=n*radix+d[i];
    		}
    		if(isPrime(n))printf("Yes
    ");
    		else printf("No
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    IOS学习笔记3—Objective C—简单的内存管理
    IOS学习笔记2—Objective C—类、属性、方法
    IOS学习笔记1—Iphone程序运行流程
    IOS学习笔记37——ViewController生命周期详解
    [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系
    iOS: 如何正确的绘制1像素的线
    Swift 2.0初探:值得注意的新特性
    Swift语言Storyboard教程:第二部
    C# partial 关键字详解
    spring-boot工程中,jpa下hibernate的ddl-auto的各种属性
  • 原文地址:https://www.cnblogs.com/houzm/p/13338664.html
Copyright © 2011-2022 走看看