A. Orac and Factors
题目链接-A. Orac and Factors
题目大意
给你一个数
n
n
n,让你对他执行
k
k
k次操作,每次操作加上当前数
n
n
n的最小质因子,输出最终结果
解题思路
数
论
数论
数论
- 如果n为偶数,则对于后面每次每个运算, n n n都会加2并保持为偶数,所以答案为 n + 2 k n+2k n+2k
- 如果n是奇数,那么 n n n将第一次加一个最小的奇数因子,然后变成偶数,所以答案为 f a c m i n ( n ) + 2 ( k − 1 ) fac_{min}(n)+2(k-1) facmin(n)+2(k−1)
- 具体操作见代码
附上代码
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double e=exp(1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=2e5+10;
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ull;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
if(n%2==0)
cout<<n+2*k<<endl;
else{
int i;
for(i=2;i<=n;i++){
if(n%i==0) break;
}
cout<<n+i+2*(k-1)<<endl;
}
}
return 0;
}