质数是c语言和c++中比较常见的数学问题,本篇文章将带你走进有关质数的一系列基础问题,其中包含常见的思路总结,本篇文章过后,将会持续更新c++算法系列,感兴趣的话麻烦点个关注吧!
希望能给您带来帮助,谢谢您的观看!
目录
题目一:质数口袋
题目二:回文质数 Prime Palindromes
题目三:质数筛编辑
题目四:质因数分解
做题总结:
①判断是否为质数的统一简单函数
②埃筛思想
③一段时间以来对c语言与c++的感悟
题目一:质数口袋
输入 | 100 |
输出 | 2 3 5 7 11 13 17 19 23 9 |
代码如下:
#include <bits/stdc++.h>
using namespace std;
int f(int n)
{int t=sqrt(n);for(int i=2;i<=t;i++){if(n%i==0){return 0;}}return n;
}int main()
{int a,sum=0,coun=0;cin>>a;for(int i=2;i<=a;i++){sum+=f(i);if(f(i)){printf("%d\n",i);coun++;} if(sum>=a)break; }printf("%d",coun);return 0;
}
题目二:回文质数 Prime Palindromes
输入 | 5 500 |
输出 | 5 7 11 101 131 151 181 191 313 353 373 383 |
代码如下:
#include <bits/stdc++.h>
using namespace std;
int f(int n)
{int t=sqrt(n);for(int i=2;i<=t;i++){if(n%i==0)return 0;}return n;
}void ff(int n)
{int t,m=0;t=n;while(n!=0)
{m=m*10+n%10;n=n/10;
}
if(m==t)
printf("%d\n",t);
}int main()
{int a,b,t;scanf("%d%d",&a,&b);for(int i=a;i<=b;i++){if(f(i)){ff(i);} }return 0;
}
题目三:质数筛
输入 | 5 3 4 5 6 7 |
输出 | 3 5 7 |
代码如下
#include <bits/stdc++.h>
using namespace std;
void st(long a[],long n)
{
for(int i=0;i<n;i++)
{for(int j=2;j<=a[i];j++){if(a[i]%j==0&&a[i]!=j){a[i]=0;break;}}if(a[i]!=0&&a[i]!=1)printf("%ld ",a[i]);
}
}
int main()
{long n;scanf("%ld",&n);long a[n];for(int i=0;i<n;i++)scanf("%ld",&a[i]);st(a,n);return 0;
}
题目四:质因数分解
输入 | 21 |
输出 | 7 |
代码如下
void st(int n)
{int i,j;printf("%d",j);
}
int main()
{int n;scanf("%d",&n);st(n);return 0;
}
做题总结:
①判断是否为质数的统一简单函数
int f(int n)
{int t=sqrt(n);for(int i=2;i<=t;i++){if(n%i==0)return 0;}return n;
}
很多情况下题目只要求质数部分,这个函数简单好用
②埃筛思想
很多时候我们可以在数组中把质数定义为1,把非质数定义为0,这样就可以通过if条件语句对质数进行判断
同时这个方法对于把for循环条件里的i当作自然数的把握也十分有效
③一段时间以来对c语言与c++的感悟
c语言与c++的写法实在是非常相同的,甚至很多时候只需要改一个头文件,但有的时候为了不tel,还是会选择性的去选择不同的函数,并且c++的函数较多,写代码时比较方便