赞
踩
算数基本定理(唯一分解定理): 任何合数都可以分解为若干质数的乘积,且分解式唯一(不考虑顺序) 算数基本定理(唯一分解定理):\\ 任何合数都可以分解为若干质数的乘积,且分解式唯一(不考虑顺序) 算数基本定理(唯一分解定理):任何合数都可以分解为若干质数的乘积,且分解式唯一(不考虑顺序)
O ( n ) O(\sqrt{n}) O(n )
题目链接:https://www.acwing.com/activity/content/problem/content/935/
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int n; bool isprime(int x){ if(x < 2) return false; for(int i = 2; i <= x / i; ++i){ if(x % i == 0) return false; } return true; } int main() { cin >> n; while (n -- ){ int a; scanf("%d", &a); if(isprime(a)) puts("Yes"); else puts("No"); } }
由前面的算术基本定理可知,每个数都可以分为若干质数的乘积形式。
O ( n ) O(\sqrt{n}) O(n )
题目链接:https://www.acwing.com/activity/content/problem/content/936/
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int n; void divide(int x){ for(int i = 2; i <= x / i; ++i){ if(x % i == 0){ int res = 0; while(x % i == 0){ x /= i; res++; } printf("%d %d", i, res); puts(""); } } if(x > 1) printf("%d %d\n", x, 1); puts(""); } int main() { cin >> n; while (n -- ){ int a; scanf("%d", &a); divide(a); } }
质数筛详情可见:质数筛(记录)
题目链接:https://www.acwing.com/activity/content/problem/content/937/
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1e6 + 10; int n; int primes[N], cnt; bool st[N]; void is_prime(){ for(int i = 2; i <= n; ++i){ if(!st[i]) primes[cnt++] = i; for(int j = 0; primes[j] <= n / i; ++j){ st[i * primes[j]] = true; if(i % primes[j] == 0) break; } } } int main() { cin >> n; is_prime(); cout << cnt << endl; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。