#include<iostream> #include<cstring> #include<algorithm> usingnamespace std; constint N = 110; int n; boolisprime(int n) { if (n < 2) returnfalse; if (n == 2) returntrue; for (int i = 2; i <= n / i; i++) { if (n % i == 0) returnfalse; } returntrue; } intmain() { scanf("%d", &n); while (n--) { int x; scanf("%d", &x); if (isprime(x)) puts("Yes"); else puts("No"); } return0; }
#include<iostream> #include<algorithm> #include<cstring> usingnamespace std; constint N = 110; int n; voiddivide(int n) { for (int i = 2; i <= n / i; i++) { if (n % i == 0) { int s = 0; while (n % i == 0) { n /= i; s++; } printf("%d %d\n", i, s); } } if (n > 1) printf("%d %d\n", n,1); puts(""); } intmain() { scanf("%d", &n); while (n--) { int x; scanf("%d", &x); divide(x); } return0; }
#include<iostream> #include<algorithm> usingnamespace std; intmain() { int n; cin >> n; while(n--) { int a; cin >> a; int res = a; for (int i = 2; i <= a / i;i ++) { if(a % i == 0) { res = res / i * (i - 1); while(a % i == 0) { a /= i; } } } if(a > 1) res = res / a * (a - 1); cout << res << endl; } return0; }
#include<iostream> usingnamespace std; intgcd(int a,int b) { return b ? gcd(b, a % b) : a; } intmain() { int n; cin >> n; while(n--) { int a, b; cin >> a >> b; printf("%d\n", gcd(a, b)); } return0; }
关于最大公约数有一个原理,就是如果d同时能整除a和b那么d就能同时整除a和a%b。 在这一点的基础之上我们就能对每一次的a和b进行取模操作,达到找出最大公约数的效果,如果b不为0,那么就递归求b,a % b的函数,直到a % b = 0。说明此时a已经能与b相整除了,此时一定有a一定满足整除两边数,所以为最大公约数。 省流:背板子。
usingnamespace std; typedeflonglong ll; constint mod = 1e9 + 7; intmain() { int n; cin >> n; unordered_map<int, int> primes; while(n--) { int x; cin >> x; for (int i = 2; i <= x / i; i++) { while (x % i == 0) { x /= i; primes[i]++;
} } if(x>1) primes[x]++; } ll res = 1; for(auto prime : primes) { res = res * (prime.second + 1) % mod; } cout << res << endl; }