POJ 3842 大数判断素数 + 位运算优化判重
来源:互联网 发布:青铜器乐队知乎 编辑:程序博客网 时间:2024/06/05 20:10
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<map>
#define M 100000.0
using namespace std;
int len,num=0;
int list[10000],p=0;
char str[10];
bool v[10];
int vv[312500];
int prime(int n)
{
int i;
if(n!=2&&!(n%2)||n!=3&&!(n%3)||n!=5&&!(n%5)||n!=7&&!(n%7))
return 0;
for(i=0;list[i]*list[i]<=n;i++)
{
if(!(n%list[i]))
return 0;
}
return n>1;
}
void initprime()
{
int i;
for(list[p++]=2,i=3;i<50000;i++)
if(prime(i))
list[p++]=i;
}
void dfs(int sum)
{
int i;
if(vv[sum/32]&(1<<(sum%32))) return ;
vv[sum/32]|=1<<(sum%32);
if(prime(sum)) num++;
for(i=0;i<len;i++)
{
if(!v[i])
{
v[i]=true;
dfs(sum*10+str[i]-'0');
v[i]=false;
}
}
}
int main()
{
int m;
initprime();
scanf("%d",&m);
while(m--)
{
num=0;
scanf("%s",str);
len=strlen(str);
memset(v,false,sizeof(v));
memset(vv,false,sizeof(vv));
dfs(0);
printf("%d\n",num);
}
return 0;
}
- POJ 3842 大数判断素数 + 位运算优化判重
- 【Eternallyc】大数素数判断
- POJ 2458 DFS+判重
- hdu 2209 翻纸牌游戏 (双向bfs+位运算判重)
- POJ 3101 素数分解+大数
- 大数相加—位运算
- UVA11645 Bits【位运算+大数】
- POJ Holedox Moving BFS hash判重
- poj 2387 dijkstra(注意判重)
- POJ 1465 Multiple BFS + 余数判重
- poj 3131 双向搜索+hash判重
- POJ 2046 Gap(BFS+hash判重)
- poj 1465 bfs+余数判重
- poj 3050 dfs+set判重
- poj 1007 双向bfs+set判重
- POJ 3263 差分+set判重
- POJ 3050 枚举+dfs+set判重
- 素数判断+优化
- android -- >intent (信使)
- Objective-C ViewController之间传值的方法
- ZOJ 2972
- HDU 1069
- 可重入于不可重入函数
- POJ 3842 大数判断素数 + 位运算优化判重
- ZJNU1909
- ZJNU 1888
- iPhone 通过UIRequiredDeviceCapabilities指定程序适用于哪些设备
- ZJNU 1903
- 深搜 字典序
- 澄清整理关于clone(),Clonable和CloneNotSupportedException
- ZJNU1869
- FreeBSD编译内核详解