标签: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 }
标签:ios print class row i++ preview ons tom msu
原文地址:https://www.cnblogs.com/LiqgNonqfu/p/9966948.html