Welcome to Liukejie's|

liukejie

园龄:1年8个月粉丝:5关注:11

2023-07-01 10:51阅读: 8评论: 0推荐: 0

PRIMPERM - Prime Permutations

如果用暴力筛因子的方法,在 t<104,n<107 下肯定是要超时的,所以用了时间和空间都较优的埃氏筛法来预处理出 1107 的质数。

对于每一个 n,先提取出 n 的每一位,放到一个数组里。求出数组的全排列,(使用函数 next_permutation,用法:next_permutaion(数组名+起始地址,数组名+末尾地址+1),注意使用之前要对数组进行升序排序),之后判断组成的数字是否为素数即可。

代码如下:

main()
{
	init(MAXN); //筛素数
	read(t);
   	for(; t; -- t)
   	{
        read(n);
        int cnt = 0, res = 0;
	    for(;n;)
        {
    		a[++ cnt] = n % 10; //转换成序列
	    	n /= 10;
	    }
		sort(a + 1, a + cnt + 1); // 排序
		do{
            if(!a[1]) continue; // 全排列的第一个数字不能是 0
            n = 0;
            rep(i, 1, cnt) n = n * 10 + a[i]; // 将全排列转化成数字
            res += !f[n];
		}while(next_permutation(a + 1, a + cnt + 1));
        write(res, '\n');
	}
	return 0;
}
posted @   liukejie  阅读(8)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起