MT2206 tax
#include<bits/stdc++.h>
using namespace std;
int n;
bool prime(int num){
for(int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main( )
{
cin >> n;
if (prime(n))
cout << 1;
else if (n % 2 == 0)
cout << 2;
else if (prime(n-2))
cout << 2;
else
cout << 3;
return 0;
}
MT2203 约束个数
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
int ans = 0;
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
ans += 2;
}
if (i * i == n) {
ans--;
}
}
cout << ans;
return 0;
}
MT2204 约束之和
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
int ans = 1;
for (int i = 2; i * i <= n; i++) {
int tmp = i;
while (n % i == 0) {
tmp *= i, n /= i;
}
ans *= (tmp - 1) / (i - 1);
}
if (n != 1){
ans *= (n + 1);
}
cout << ans;
return 0;
}
MT2208 全部相同
#include<bits/stdc++.h>
using namespace std;
int t, n, a[47];
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
int main( )
{
cin >> t;
while (t--){
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort (a, a + n);
for (int i = 1; i < n; i++) {
a[i] -= a[0];
}
if (a[n-1] == 0) {
cout << -1 << endl;
break;
}
int ans = gcd(a[1], a[2]);
for (int i = 3; i < n; i++) {
ans = gcd(ans, a[i]);
}
cout << ans << endl;
}
return 0;
}
MT2209 石头剪刀布
#include<bits/stdc++.h>
using namespace std;
int n, loseS, loseT;
string s, t;
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
int lcm(int a, int b){
return a * b / gcd(a, b);
}
void iswin(int a, int b) {
if(s[a] =='R' && t[b] == 'S')
loseT++;
if(s[a] =='S' && t[b] == 'R')
loseS++;
if(s[a] =='S' && t[b] == 'P')
loseT++;
if(s[a] =='P' && t[b] == 'S')
loseS++;
if(s[a] =='P' && t[b] == 'R')
loseT++;
if(s[a] =='R' && t[b] == 'P')
loseS++;
}
int main( )
{
cin >> n >> s >> t;
int lens = s.length(), lent = t.length();
int cycle = lcm(lens, lent);
for (int i = 0; i < cycle; i++) {
iswin(i % lens, i % lent);
}
loseS *= n / cycle, loseT *= n / cycle;
for (int i = 0; i < n % cycle; i++) {
iswin (i % lens, i % lent);
}
cout << loseS << ' ' << loseT << endl;
return 0;
}
MT2205 模数
#include<bits/stdc++.h>
using namespace std;
int a, b, ans;
int main( )
{
cin >> a >> b;
if (a == b) {
cout << "infinity" << ends;
return 0;
}
if (a < b) {
cout << 0 << endl;
return 0;
}
a -= b;
for (int i = 1; i * i <= a; i++) {
if (a % i == 0) {
if (i > b)
ans ++;
if (a / i > b && a / i != i) {
ans ++;
}
}
}
cout << ans << endl;
return 0;
}
MT2212 余数之和
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, f, ans, tmp;
signed main( )
{
cin >> n >> f;
if (n > f) {
tmp = (n - f) * f;
n = f;
}
for( int l = 1, r; l <= n; l = r + 1) {
r = min(f / (f / l), n);
ans += (r - l + 1) * (f / l) * (l + r) / 2;
}
cout << n * f - ans + tmp;
return 0;
}
MT2207 数树
#include<bits/stdc++.h>
using namespace std;
int c, n;
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
int main( )
{
cin >> c;
for (int i = 1; i <= c; i++) {
cin >> n;
int ans = 0;
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
if (gcd(j, k) == 1)
ans++;
}
}
cout << i << " " << n << " " << ans + 2 << endl;
}
return 0;
}
MT2210 除法
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, ans;
signed main( )
{
cin >> n;
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
ans += (r - l + 1) * (n / l);
}
cout << ans;
return 0;
}
MT2211 除法2
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, ans;
signed main( )
{
cin >> n;
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
ans += (r - l + 1) * (n / l) * (l + r) / 2;
}
cout << ans;
return 0;
}