UVa 897 - Anagrammatic Primes

題目:計算比n大,的位數相同的字謎素數(本身和反轉后都是素數的數字)。

分析:數論,打表。打表計算出所有的字謎素數(22个),查找输出。

說明:╮(╯▽╰)╭。

#include <cstring>
#include <cstdio>

/*
int prime[1000001];
int visit[10000001];
int digit[11];
int biger(int value)
{
	for (int i = 9; i >= 0; -- i)
		digit[i] = 0;
	while (value) {
		digit[value%10] ++;
		value /= 10;
	}
	int ans = 0;
	for (int i = 9; i >= 0; -- i)
		while (digit[i]) {
			ans = ans*10+i;
			digit[i] --;
		}
	return ans;
}

int makelist()
{
	memset(visit, 0, sizeof(visit));
	visit[0] = visit[1] = 1;
	for (int i = 2; i < 10000001; ++ i)
		if (!visit[i]) {
			for (int j = i+i; j < 10000001; j += i)
				visit[j] = 1;
		}
	for (int i = 2; i < 10000001; ++ i) 
		if (visit[i] && !visit[biger(i)])
			visit[biger(i)] = 1;
	for (int i = 2; i < 10000001; ++ i) 
		if (!visit[i] && visit[biger(i)])
			visit[i] = 1;
	int count = 0;
	for (int i = 2; i < 10000001; ++ i) 
		if (!visit[i]) 
			prime[count ++] = i;
	return count;
}
*/

int main()
{
	int list[22] = {2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97,
					113, 131, 199, 311, 337, 373, 733, 919, 991};
	int n;
	while (~scanf("%d",&n) && n) {
		int m = n, u = 1, flag = 1;
		while (m) {
			u *= 10;
			m /= 10;
		}
		for (int i = 0; i < 22; ++ i)
			if (list[i] > n && list[i] < u) {
				printf("%d\n",list[i]);
				flag = 0;
				break;
			}
		if (flag) puts("0");
	}
		
    return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值