刷题日记—质因数
在遇到一些数据范围比较大的题目时,可以结合题目条件,看是否可以分解成质因数进行操作
1.例题:
```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.取素因子游戏:
<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%i0){
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>
浙公网安备 33010602011771号