Divisor Subtraction
Description
You are given an integer number nn. The following algorithm is applied to it:
- if n=0, then end algorithm;
- find the smallest prime divisor d of n;
- subtract dd from n and go to step 1.
Determine the number of subtrations the algorithm will make.
Input
The only line contains a single integer nn (2≤n≤10^10).
Output
Print a single integer — the number of subtractions the algorithm will make.
Sample Input
5
1
4
2
Hint
In the first example 5 is the smallest prime divisor, thus it gets subtracted right away to make a 0.
In the second example 2 is the smallest prime divisor at both steps.
题解:给你一个数n,找它的最小素因子,每回减去,直到n=0,素因子均为奇数(除了2),奇-奇=偶,例如15,标准答案应该为7而不是5,在1e5内没有素因子时,答案为1。
代码如下:
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #include<string> 7 #include<vector> 8 #include<cmath> 9 #include<stack> 10 #include<queue> 11 #include<map> 12 #include<set> 13 #define memset(x,y) memset(x,y,sizeof(x)) 14 #define swap(a,b) (a=a+b,b=a-b,a=a-b) 15 #define debug(x) cout<<x<<" "<<endl 16 #define rson i << 1 | 1,m + 1,r 17 #define e 2.718281828459045 18 #define max(a,b) (a>b?a:b) 19 #define min(a,b) (a<b?a:b) 20 #define read(x) scanf("%d",&x) 21 #define put(x) printf("%d\n",x) 22 #define lowbit(x) (x&(-x)) 23 #define lson i << 1,l,m 24 #define INF 0x3f3f3f3f 25 #define ll long long 26 #define mod 1001113 27 #define N 100000000 28 #define PI acos(-1) 29 #define eps 1.0e-6 30 #define maxn 27 31 //std::ios::sync_with_stdio(false); 32 //cin.tie(NULL); 33 //const int maxn=; 34 using namespace std; 35 36 37 38 int main() 39 { 40 ll n; 41 cin>>n; 42 for(ll i=2;i*i<=n;i++) 43 { 44 if(n%i==0) 45 { 46 cout<<1+(n-i)/2<<endl; 47 return 0; 48 } 49 } 50 cout<<"1"<<endl; 51 return 0; 52 }