This commit is contained in:
Zengtudor 2025-02-15 10:45:36 +08:00
parent 89a01c8f0b
commit 891db6b7ca
2 changed files with 142 additions and 0 deletions

46
src/2/15/T316693.cpp Normal file
View File

@ -0,0 +1,46 @@
#include <bits/stdc++.h>
#include <cstdint>
using namespace std;
using ll = int64_t;
ll cgcd(ll a, ll b){
while(b){
ll temp = a % b;
a = b;
b = temp;
}
return a;
}
ll phi(ll n){
if(n == 0) return 0;
ll res = n;
for(ll p=2; p*p <= n; p++){
if(n % p == 0){
while(n % p ==0){
n /= p;
}
res -= res / p;
}
}
if(n > 1){
res -= res / n;
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin >> T;
while(T--){
ll a, m;
cin >> a >> m;
ll d = cgcd(a, m);
ll mp = m / d;
ll ans = phi(mp);
cout << ans << "\n";
}
}

96
src/2/15/T574007.cpp Normal file
View File

@ -0,0 +1,96 @@
#include <algorithm>
#include <bitset>
#include <cstddef>
#include <cstdint>
#include <iostream>
#include <istream>
#include <limits>
#include <vector>
using ll = int64_t;
constexpr ll maxn = 1e3;
constexpr ll maxa = 10000100;
ll n, m;
ll arr[maxn + 5][maxn + 5];
ll cm[maxn + 5][maxn + 5];
ll cr[maxn + 5], ca[maxn + 5];
ll ans = std::numeric_limits<ll>::max();
ll np[maxa + 5];
std::bitset<10000105> bs;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
bs.set();
bs.reset(0);
bs.reset(1);
for (ll i = 2; i * i <= maxa; ++i) {
if (bs[i]) {
for (ll j = i * i; j <= maxa; j += i) {
bs[j] = false;
}
}
}
ll nnp = std::numeric_limits<ll>::max();
for (ll i = maxa; i >= 0; --i) {
if (bs[i]) {
nnp = i;
}
np[i] = nnp;
}
std::cin >> n >> m;
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
std::cin >> arr[i][j];
if (arr[i][j] > maxa) {
arr[i][j] = maxa;
}
}
}
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
cm[i][j] = np[arr[i][j]] - arr[i][j];
}
}
for (ll i = 0; i < n; i++) {
ll row_total = 0;
for (ll j = 0; j < m; j++) {
row_total += cm[i][j];
}
cr[i] = row_total;
}
for (ll j = 0; j < m; j++) {
ll ct = 0;
for (ll i = 0; i < n; i++) {
ct += cm[i][j];
}
ca[j] = ct;
}
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
ll ccc =
cr[i] + ca[j] + (bs[arr[i][j]] ? 0 : -cm[i][j]);
if (ccc < ans) {
ans = ccc;
}
}
}
std::cout << ans << '\n';
}