X质数--数的dfs排列+线性筛

发布于:2025-05-01 ⋅ 阅读:(73) ⋅ 点赞:(0)

https://www.luogu.com.cn/problem/P12233

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<int,int> pii;
ll an;
bool arr[10*N];
int prime[10*N];
int pp;
int s;
int l;
void xxs(int x)
{
	for(int i=2;i<=x;i++)
	{
		if(!arr[i]) prime[++pp]=i;
		for(int j=1;j<=pp;j++)
		{
			if(i*prime[j]>x) break;
			arr[i*prime[j]]=true;
			if(i%prime[j]==0) break;
		}
	}
}
int f;
void dfs(int x,vector<int > a)
{
	if(x<0&&f==0)
	{
		if(!arr[s/10]) 
		{
		f=1;	
		}
		else return;
	}
	if(x>=0)
	{
		s+=a[x];
		s*=10;
		for(int j=l+1;j>=1;j--)
		{
			dfs(x-j,a);
		}
		s/=10;
		s-=a[x];
	}
}
void solve(int x)
{
	if(!arr[x]) an++;
	else
	{   vector<int> a;
		while(x)
		{
			a.push_back(x%10);
			x/=10;
		}
		int pos=a.size()-1;
		f=0;
		s=0;
		for(int i=pos;i>=0;i--)
		{
			l=i;
			dfs(i,a);
			if(f==1)
			{
			an++;
			break;	
			}
			s=0; 
		}
		f=0;
	}
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //xxs(1000001);
    //arr[1]=arr[0]=true;
	//for(int i=1;i<=1000000;i++)
    //{	
    //	solve(i);
    	
	//}cout<<an;
	cout<<"989457";
    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到