码迷,mamicode.com
首页 > 其他好文 > 详细

CF1076B Divisor Subtraction

时间:2018-11-16 00:28:29      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:ios   print   class   row   i++   preview   ons   tom   msu   

题目大意:
   输入n,不断将n赋值为n-p(p为n的最小质因数),问减多少次n=0。(2≤n≤1010).

思路:

    偶数的最小质因子为2,并且减之后还一直为2;奇数的最小质因子一定是奇数,相减后变为2

 

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 
 7 using namespace std;
 8 
 9 const int  maxn=100000;
10 int pri[maxn+10],prin;
11 long long n;
12 bool shaizi[maxn+10];
13 
14 void init()
15 {
16     memset(shaizi,0,sizeof(shaizi));
17     shaizi[1]=true;
18     for(int i=1;i<=maxn;i++)
19     {
20         if(!shaizi[i])
21         {
22             prin++;
23             pri[prin]=i;
24         }
25         for(int j=1;j<=prin&&i*pri[j]<=maxn;j++)
26         {
27             shaizi[i*pri[j]]=true;
28             if(i%pri[j]==0)break;
29         }
30     }
31 }
32 
33 int main()
34 {
35     cin>>n;
36     if(n==0)
37     {
38         printf("0\n");
39         return 0;
40     }
41     if(!n&1)
42     {
43         cout<<n/2<<endl;
44         return 0;
45     }
46     //int s=sqrt(n);
47     init();
48     int f=0;
49     for(int i=1;i<=prin;i++)
50     {
51         if(n%pri[i]==0)
52         {
53             n-=pri[i];
54             f=1;
55             break;
56         }
57     }
58     if(!f)printf("1\n");
59     else cout<<n/2+1<<endl;
60     return 0;
61 }

 

CF1076B Divisor Subtraction

标签:ios   print   class   row   i++   preview   ons   tom   msu   

原文地址:https://www.cnblogs.com/LiqgNonqfu/p/9966948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!