Sujeto al efecto:
Dado el número de factores de un número libre de cuadrados n (es decir, factores no son el mismo número primo) (3 <= n <10 ^ 5), de modo que a encontrar un m (2 <= m <n), tal que n * condiciones libres de m en línea con el cuadrado del número de factores.
ideas:
1. Encontrar un número primo n no es un factor.
2. milagro violencia.
1 #include <cstdio> 2 #include <iostream> 3 #include <algoritmo> 4 #include <cmath> 5 #include < string > 6 #include <cstring> 7 #include <mapa> 8 usando espacio de nombres std; 9 const largo largo maxN = 1e5 + 7 ; 10 typedef largo largo ll; 11 / * 找出一个不是n因子的质数 * / 12 bool prime_if [maxN]; 13 int prime [maxN], x; 14 void oulasai ( int n) 15 { 16 para ( int i = 2 ; i <= n; i ++ ) 17 { 18 si (! prime_if [i]) 19 Primer [x ++] = i; 20 para ( int j = 0 ; j <x; j ++ ) 21 { 22 si (i * prime [j]> n) 23 descanso ; 24 prime_if [i * prime [j]] = verdadero ; 25 Si (% prime i [j] == 0) 26 descanso ; 27 } 28 } 29 } 30 31 int main () 32 { 33 int n, i; 34 cin >> n; 35 oulasai (n); 36 para (i = 0 ; i <x; i ++ ) 37 { 38 si (n% prime [i]) 39 descanso ; 40 } 41 tribunal << prime [i] << endl; 42 de retorno 0 ; 43 }
1 #include <cstdio> 2 #include <iostream> 3 #include <algoritmo> 4 #include <cmath> 5 #include < string > 6 #include <cstring> 7 #include <mapa> 8 usando espacio de nombres std; 9 const largo largo maxN = 1e5 + 7 ; 10 typedef largo largo ll; 11 12 / * 暴力出奇迹 * / 13 int main () 14 { 15 intn, findnum; 16 cin >> n; 17 para ( int i = 2 ; i <n; i ++ ) 18 { 19 findnum = 1 ; 20 para ( int j = 2 ; j <sqrt (n * i); j ++ ) 21 { 22 si ((n * i)% (j * j) == 0 ) 23 { 24 findnum = 0 ; 25 descanso ; 26 } 27 } 28 si (findnum) 29 { 30 tribunal << i << endl; 31 descanso ; 32 } 33 34 } 35 36 de retorno 0 ; 37 }