#1231
Cardinal
Fie n
și p
două numere naturale.
Notăm cu A(n,p)
mulțimea tuturor numerelor naturale cu proprietățile :
2
și mai mici sau egale cu n
;p
.Să se scrie un program care citește două numere naturale n
și p
și determină cardinalul mulțimii A(n,p)
.
Problema | Cardinal | Operații I/O |
cardinal.in /cardinal.out
|
---|---|---|---|
Limita timp | 0.1 secunde | Limita memorie |
Total: 8 MB
/
Stivă 8 MB
|
Id soluție | #43491115 | Utilizator | |
Fișier | cardinal.cpp | Dimensiune | 9.21 KB |
Data încărcării | 28 Aprilie 2023, 19:15 | Scor / rezultat | 28 puncte |
cardinal.cpp: In function 'int solve(int, int)': cardinal.cpp:22:243: warning: unused variable 'cnt' [-Wunused-variable] };vector<int> primes;bitset<VMAX> ciur;int desc(int n) {int mx = 1;for (int i = 0; primes[i] * primes[i] <= n; i++) {int cnt = 0;while (n % primes[i] == 0) {cnt++;n /= primes[i];}mx = max(mx, cnt);}return mx;}int solve(int start, int n) {int cnt = 0, b = start;for (int i = BUCKET * start; i <= n; i++) {int val = desc(i) - 1;if (i > 1 && 0 <= val && val < 10)s[val][b]++;}int ans = 0;for (int i = 0; i < p; i++)ans += s[i][start];return ans;}void precalc() {for (int i = 2; i < VMAX; i++) {if (!ciur[i])primes.push_back(i);for (int j = 0; j < primes.size() && i * primes[j] < VMAX; j++) {ciur[i * primes[j]] = 1;if (i % primes[j] == 0) break;}}}int main() {freopen(FILE_NAME ".in", "r", stdin);freopen(FILE_NAME ".out", "w", stdout);precalc();cin >> n >> p;cout << solve(n / BUCKET, n);} ^ cardinal.cpp: In function 'void precalc()': cardinal.cpp:22:557: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] };vector<int> primes;bitset<VMAX> ciur;int desc(int n) {int mx = 1;for (int i = 0; primes[i] * primes[i] <= n; i++) {int cnt = 0;while (n % primes[i] == 0) {cnt++;n /= primes[i];}mx = max(mx, cnt);}return mx;}int solve(int start, int n) {int cnt = 0, b = start;for (int i = BUCKET * start; i <= n; i++) {int val = desc(i) - 1;if (i > 1 && 0 <= val && val < 10)s[val][b]++;}int ans = 0;for (int i = 0; i < p; i++)ans += s[i][start];return ans;}void precalc() {for (int i = 2; i < VMAX; i++) {if (!ciur[i])primes.push_back(i);for (int j = 0; j < primes.size() && i * primes[j] < VMAX; j++) {ciur[i * primes[j]] = 1;if (i % primes[j] == 0) break;}}}int main() {freopen(FILE_NAME ".in", "r", stdin);freopen(FILE_NAME ".out", "w", stdout);precalc();cin >> n >> p;cout << solve(n / BUCKET, n);} ^ cardinal.cpp: In function 'int main()': cardinal.cpp:22:695: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] };vector<int> primes;bitset<VMAX> ciur;int desc(int n) {int mx = 1;for (int i = 0; primes[i] * primes[i] <= n; i++) {int cnt = 0;while (n % primes[i] == 0) {cnt++;n /= primes[i];}mx = max(mx, cnt);}return mx;}int solve(int start, int n) {int cnt = 0, b = start;for (int i = BUCKET * start; i <= n; i++) {int val = desc(i) - 1;if (i > 1 && 0 <= val && val < 10)s[val][b]++;}int ans = 0;for (int i = 0; i < p; i++)ans += s[i][start];return ans;}void precalc() {for (int i = 2; i < VMAX; i++) {if (!ciur[i])primes.push_back(i);for (int j = 0; j < primes.size() && i * primes[j] < VMAX; j++) {ciur[i * primes[j]] = 1;if (i % primes[j] == 0) break;}}}int main() {freopen(FILE_NAME ".in", "r", stdin);freopen(FILE_NAME ".out", "w", stdout);precalc();cin >> n >> p;cout << solve(n / BUCKET, n);} ^ cardinal.cpp:22:734: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] };vector<int> primes;bitset<VMAX> ciur;int desc(int n) {int mx = 1;for (int i = 0; primes[i] * primes[i] <= n; i++) {int cnt = 0;while (n % primes[i] == 0) {cnt++;n /= primes[i];}mx = max(mx, cnt);}return mx;}int solve(int start, int n) {int cnt = 0, b = start;for (int i = BUCKET * start; i <= n; i++) {int val = desc(i) - 1;if (i > 1 && 0 <= val && val < 10)s[val][b]++;}int ans = 0;for (int i = 0; i < p; i++)ans += s[i][start];return ans;}void precalc() {for (int i = 2; i < VMAX; i++) {if (!ciur[i])primes.push_back(i);for (int j = 0; j < primes.size() && i * primes[j] < VMAX; j++) {ciur[i * primes[j]] = 1;if (i % primes[j] == 0) break;}}}int main() {freopen(FILE_NAME ".in", "r", stdin);freopen(FILE_NAME ".out", "w", stdout);precalc();cin >> n >> p;cout << solve(n / BUCKET, n);} ^
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
0 | 0 secunde | OK. | 4 | 4 | ||
1 | 0.008 secunde | OK. | 4 | 4 | ||
2 | Depășit | Limita de timp depășită | 4 | 0 | ||
3 | 0 secunde | Raspuns gresit. | 4 | 0 | ||
4 | 0 secunde | OK. | 4 | 4 | ||
5 | 0.004 secunde | OK. | 4 | 4 | ||
6 | Depășit | Limita de timp depășită | 4 | 0 | ||
7 | 0 secunde | OK. | 4 | 4 | ||
8 | Depășit | Limita de timp depășită | 4 | 0 | ||
9 | 0.008 secunde | OK. | 4 | 4 | ||
10 | Depășit | Limita de timp depășită | 4 | 0 | ||
11 | 0.088 secunde | OK. | 4 | 4 | ||
12 | Depășit | Limita de timp depășită | 4 | 0 | ||
13 | Depășit | Limita de timp depășită | 4 | 0 | ||
14 | 0 secunde | Raspuns gresit. | 4 | 0 | ||
15 | Depășit | Limita de timp depășită | 4 | 0 | ||
16 | Depășit | Limita de timp depășită | 4 | 0 | ||
17 | Depășit | Limita de timp depășită | 4 | 0 | ||
18 | Depășit | Limita de timp depășită | 4 | 0 | ||
19 | 0 secunde | Raspuns gresit. | 4 | 0 | ||
20 | 0 secunde | Raspuns gresit. | 4 | 0 | ||
21 | Depășit | Limita de timp depășită | 4 | 0 | ||
22 | Depășit | Limita de timp depășită | 4 | 0 | ||
23 | Depășit | Limita de timp depășită | 4 | 0 | ||
24 | Depășit | Limita de timp depășită | 4 | 0 | ||
Punctaj total | 28 |
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Cardinal face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.