Codeforces Round #641 (Div. 2)的其他题解点我
A. Orac and Factors
题目大意:
定义一个函数f(n),f(n)= n的不为1的最小因子
现在给出一个操作,使 n = n + f(n)
问对于数n,进行操作k次后的值
思路:
我们可以知道在进行一次操作后,得到的数n一定是2的倍数
证明:
对于偶数,显然
对于奇数,其最小因子不可能的偶数,所以奇数加奇数,变成偶数
所以我们只需要进行一次操作,剩下的k - 1次操作都是加2
答案就是 n + f ( n ) + 2 ( k − 1 ) n + f (n)+ 2 (k-1) n+f(n)+2(k−1)
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int maxn = 1e6 + 7;
const int INF_int = 1e9;
int main() {
int T;
scanf("%d", &T);
while (T--) {
ll x,k;
scanf("%lld %lld", &x, &k);
int flag = 0;
for (int i = 2; i <= x; ++i) {
if (x % i == 0) {
x += i; k--;
break;
}
}
printf("%lld\n",x + k * 2);
}
}