刷题日记—质因数

在遇到一些数据范围比较大的题目时,可以结合题目条件,看是否可以分解成质因数进行操作
1.例题:image

```cpp
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int countPrime(int a,int b){
    int cnt=0;
  while(a%b==0){  //如果能够整除,说明b是a的一个因数
      a/=b;
      cnt++;
  }
  
 

   return cnt;
}

int main() {
   vector<int> a;
   int n;
   cin>>n;
   for(int i=0;i<n;++i){
    int x;
    cin>>x;
    a.push_back(x);
   }  
   int cnt2=0,cnt3=0,cnt5=0;
   for(int i=0;i<n;++i){
    cnt2+=countPrime(a[i],2);  //找出30的质因数
    cnt3+=countPrime(a[i],3);
    cnt5+=countPrime(a[i],5);

   }
   int k=min({cnt2,cnt3,cnt5});
   cout<<k<<endl;
   return 0;

   

   
}
// 64 位输出请用 printf("%lld")




2.取素因子游戏:![image](https://img2024.cnblogs.com/blog/3713817/202511/3713817-20251124201618091-1299361389.png)


<details>
<summary>点击查看代码</summary>

include

using namespace std;
int main() {
int t;
cin>>t;
while(t--){
int cnt=0;
int x;
int k;
cin>>x;
if(x1){
cout<<"yukari"<<endl;
continue;
}
for(int i=2;i*i<=x;++i){
while(x%i
0){
cnt++; //由于从小到大遍历,所以一开始的肯定都是质因子,x也随之变化,后面的也一定只能是质因子(相当于把x中的合子拆成一个个质因子)
x/=i;
}

}
if(x>1){
    cnt++;  //看有没有大于根号x的质因子

}
if(cnt&1){
    cout<<"kou"<<endl;

}
else{
    cout<<"yukari"<<endl;
}

}
return 0;
}
// 64 位输出请用 printf("%lld")

</details>
posted @ 2025-11-24 20:17  MaoS1mple  阅读(4)  评论(0)    收藏  举报