PAT Advanced 1015

题意:

要求你把给的这个数按照他给的进制反转下,然后判断是否是素数。是就输出yes,否no

坑点:

1.1不是素数

2.题目说的是10^5,千万别写成10000.。。。。。嘛,这个算眼睛不敏感,要多练。

#include<iostream>
#include<string>
#include<fstream>
#include<cmath>
using namespace  std;
string s;
int number;
int r;
bool isprime[111111];
string ans;
void deep(int radix, int num)
{
	if (num < radix)
	{
		ans = (char)(num + '0');
		return;
	}
	deep(radix, num / radix);
	ans += (char)(num%radix + '0');
}
int change(int radix, string numm)
{
	int length = numm.length();
	int sum = 0;
	int temp = 1;
	for (int i = length - 1; i >= 0; i--)
	{
		if (numm[i] >= 'a'&&numm[i] <= 'z')
		{
			sum += (numm[i] - 'a' + 10)*temp;
		}
		else
		{
			sum += (numm[i] - '0')*temp;
		}
		temp *= radix;
		
	}
	return sum;
}
void doprime()
{
	for (int i = 2; i < sqrt((double)111111); i++)
	{
		if (!isprime[i])
		{
			for (long long j = i*i; j < 111111; j += i)
			{
				isprime[j] = true;
			}
		}
	}
}
void solve()
{
	int length = ans.length();
	s = "";
	for (int j = length - 1; j >= 0; j--)
	{
		s += ans[j];
	}
	//cout << s << endl;
	long long number = change(r, s);
	if (!isprime[number]&&number!=1)
		cout << "Yes" << endl;
	else
		cout << "No" << endl;
}
void input()
{
	doprime();
	while (cin >> number)
	{
		if (number<0)
			break;
		cin >> r;
		if (number == 1)
		{
			cout << "Yes" << endl;
			continue;
		}
		if (isprime[number])
		{
			cout << "No" << endl;
			continue;
		}
		ans = "";
		deep(r, number);
		solve();
	}
}
int main()
{
	input();
	return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值