Advertisement
a53

Ciurulet

a53
Sep 6th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define ld long double
  7. #define pb push_back
  8. #define mp make_pair
  9. #define pii pair<int, int>
  10. #define pll pair<ll, ll>
  11. #define pdd pair<ld, ld>
  12. #define all(x) (x).begin(), (x).end()
  13. #define fi first
  14. #define se second
  15.  
  16. const int NMAX = 1e6 + 5;
  17.  
  18. char s[NMAX], sol[NMAX];
  19. bool viz[NMAX];
  20. int n;
  21.  
  22. int main() {
  23. cin.sync_with_stdio(false);
  24.  
  25. freopen("ciurulet.in", "r", stdin);
  26. freopen("ciurulet.out", "w", stdout);
  27.  
  28. scanf("%d", &n);
  29. scanf("%s", s + 2);
  30.  
  31. for (int i = 2; i <= n; i++) {
  32. if (!viz[i]) {
  33. if (s[i] == '0') {
  34. sol[i] = '0';
  35. } else if (s[i] == '1') {
  36. sol[i] = '1';
  37. for (int j = 2 * i; j <= n; j += i) {
  38. viz[j] = 1;
  39. sol[j] = '1';
  40. }
  41. } else {
  42. bool good_prime = 1;
  43. for (int j = 2 * i; j <= n; j += i) {
  44. if (s[j] == '1') {
  45. good_prime = 0;
  46. break;
  47. }
  48. }
  49.  
  50. if (good_prime) {
  51. sol[i] = '1';
  52. for (int j = 2 * i; j <= n; j += i) {
  53. viz[j] = 1;
  54. sol[j] = '1';
  55. }
  56. } else {
  57. sol[i] = '0';
  58. }
  59. }
  60. }
  61. }
  62.  
  63. int ans = 0;
  64. for (int i = 1; i <= n; i++)
  65. if (sol[i] == '1') ans++;
  66.  
  67. printf("%d\n", ans);
  68. printf("%s\n", sol + 2);
  69.  
  70. return 0;
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement