思路
直接按照题目意思,即可。
首先输入的时候可以先判断一下是否是素数,是的话直接输出
1
1
1 。
否则会输入一个超大素数时,会超时。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5;
const int inf=0x3f3f3f3f;
ll n,k,a[N],num;
bool zhishu(ll x)
{
for(ll i=2;i<=sqrt(x);i++)
{
if(x%i==0)return 0;
}
return 1;
}
ll zhi(ll x)
{
for(ll i=2;i<=x;i++)
{
if(x%i==0)
{
if(zhishu(i))return i;
}
}
}
int main()
{
cin>>n;
if(zhishu(n))
{
cout<<"1";
return 0;
}
if(n%2==0)
{
cout<<n/2;
return 0;
}
while(n)
{
if(n%2==0)
{
cout<<n/2+num;
return 0;
}
num++;
ll d=zhi(n);
n-=d;
}
cout<<num;
return 0;
}