专栏文章
10.26-东塘404-J1R(2):埃氏筛
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mineskoy
- 此快照首次捕获于
- 2025/12/02 01:14 3 个月前
- 此快照最后确认于
- 2025/12/02 01:14 3 个月前
新知识
CPP//埃氏筛:
//标记当前数是合数(1)/质数(0)
//默认一开始所有数都是指数
bool isp[100000010];
void ashpick(int n){ //筛出1~n之间的所有数
isp[0]=isp[1]=1; //0和1都不是质数
for(int i=1;i<=n;i++){
if(isp[i]==0){ //找到一个质数i
for(int j=i*2;j<=n;j+=i){ //拿i去筛掉他的所有倍数
isp[j]=1; //标记成不是质数
}
}
}
}
P8754 [蓝桥杯 2021 省 AB2] 完全平方数
思路
先定义个n变量,要开long long,在输入n,然后定个x=1,来存最小的正整数,再来一个for循环:
CPPfor(int i=2;i<=n/i;i++){
int cnt=0;
while(n%i==0){
cnt++;
n/=i;
}
if(cnt%2==1){
x*=i;
}
}
然后来个if判断:if(n>1)x*=n;
最后输出x。
代码
CPP#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
cin>>n;
long long x=1;
for(int i=2;i<=n/i;i++){
int cnt=0;
while(n%i==0){
cnt++;
n/=i;
}
if(cnt%2==1){
x*=i;
}
}
if(n>1)x*=n;
cout<<x;
return 0;
}
P10495 阶乘分解
思路
先顶一个变量和一个数组:n,cnt[1000010];然后输入n,最后来两个for循环:
CPPfor(int xx=1;xx<=n;xx++){
int x=xx;
for(int i=2;i<=x/i;i++){
while(x%i==0){
cnt[i]++;
x/=i;
}
}
if(x>1)cnt[x]++;
}
for(int i=1;i<=1000000;i++){
if(cnt[i]){
cout<<i<<' '<<cnt[i]<<endl;
}
}
代码
CPP#include<bits/stdc++.h>
using namespace std;
long long n,cnt[1000010];
int main(){
cin>>n;
for(int xx=1;xx<=n;xx++){
int x=xx;
for(int i=2;i<=x/i;i++){
while(x%i==0){
cnt[i]++;
x/=i;
}
}
if(x>1)cnt[x]++;
}
for(int i=1;i<=1000000;i++){
if(cnt[i]){
cout<<i<<' '<<cnt[i]<<endl;
}
}
return 0;
}
B4170 [BCSP-X 2024 6 月小学高年级组] 最小质因子
思路
先定一个判断质数因数的函数:is_prime(),在创建一个t,然后关闭同步流,最后来个while循环:
CPPwhile(t--){
long long n;
cin>>n;
if(is_prime(n)){
cout<<n<<endl;
continue;
}
for(long long i=2;i<=n/i;i++){
if(n%i==0){
cout<<i<<endl;
break;
}
}
}
代码
CPP#include<bits/stdc++.h>
using namespace std;
long long is_prime(long long n){
if(n<=1){
return 0;
}
for(long long i=2;i<=n/i;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
long long t;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
long long n;
cin>>n;
if(is_prime(n)){
cout<<n<<endl;
continue;
}
for(long long i=2;i<=n/i;i++){
if(n%i==0){
cout<<i<<endl;
break;
}
}
}
return 0;
}
P3912 素数个数
先定义个埃氏筛函数,再定个n,输入n,再用埃氏筛函数(n),再定个
ans,然后来个for循环,最后输出ans;
代码
CPP#include<bits/stdc++.h>
using namespace std;
bool isp[100000000];
void ashpick(int n){
isp[0]=isp[1]=1;
for(int i=2;i<=n;i++){
if(isp[i]==0){
for(int j=i*2;j<=n;j+=i){
isp[j]=1;
}
}
}
}
long long n;
int main(){
cin>>n;
ashpick(n);
long long ans=0;
for(int i=1;i<=n;i++){
if(isp[i]==0)ans++;
}
cout<<ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...