Sherlock y su novia --------------------------------- Teoría de números (tamiz lineal)

Sherlock tiene una nueva novia (¡esto no es como él!).

El día de San Valentín está aquí, quiere darle a su novia algunas joyas como regalo.

Compró n piezas de joyería, el valor de la i-ésima pieza es i + 1, es decir, el valor de la joyería es 2,3, ..., n + 1.

Watson retó a Sherlock a teñir estas joyas, de modo que cuando el precio de una joya era un factor cualitativo en el precio de otra joya, los colores de las dos joyas eran diferentes.

Además, Watson requiere que use la menor cantidad de colores posible.

Ayude a Sherlock a completar esta sencilla tarea.

El formato de entrada
tiene solo un número entero n por línea, que indica el número de piezas de joyería.

Formato de salida
Un entero k en la primera línea, que indica el número de colores utilizados;

La segunda fila de n enteros representa el color de la primera a la enésima pieza de joyería teñida.

Si hay varias respuestas, envíe cualquiera.

Use 1 to k para indicar el color que usa.

Rango de datos
1≤n≤105
Muestra de entrada 1:
3
Muestra de salida 1:
2
1 1 2
Muestra de entrada 2:
4
Muestra de salida 2:
2
2 1 1 2

Análisis:
Debido a que el precio de una pieza de joyería es el factor cualitativo del precio de otra pieza de joyería, cada vez que el factor de calidad se tiñe a 1, la corriente se tiñe a 2.
Finalmente, encontrará que solo hay dos colores. Debido a que todos los factores cualitativos son coprimos, el color es 1. El número restante debe tener un factor, por lo que debe teñirse a 2, sin afectarse entre sí.

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
int prime[N],cnt;
bool st[N];
void init()
{
	memset(st,false,sizeof st);
	st[1]=false;
	for(int i=2;i<=N;i++)
	{
		if(!st[i])
		{
			prime[++cnt]=i;
		}
		for(int j=1;prime[j]<=N/i&&j<=cnt;j++)
		{
			st[prime[j]*i]=true;
			if(i%prime[j]==0) break;
		}
	}
}
int main()
{
	init();
	int n,x;
	cin>>n;
	if(n<=2) puts("1");
	else puts("2");
	for(int i=2;i<=n+1;i++)
	{

		if(!st[i])
		{
			cout<<1<<" ";
		}
		else cout<<2<<" ";
	}
	cout<<endl;
}
572 artículos originales publicados · elogiados 14 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43690454/article/details/105382386
Recomendado
Clasificación