第一个(未分类)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e7+10;
const int mod=1e7+5;
ll fastpow(ll a,ll b)//1.快速幂(时间复杂度为ologn)
{
if(b==1)return a;
ll temp=fastpow(a,b/2);
if(b%2==1)return temp*temp*a;
else return temp*temp;
}
//n&1 取n的最后一位
//n>>=1,将n右移一位
ll fastpow(ll a,ll b)//2.快速幂(最多算到2^62)
{
ll res=1;
while(b){
if(b&1) res=(res*a)%mod;//取模运算
a*=a;
b>>=1;
}
return res;
}
//埃式筛
ll is_prime[maxn];//记录质数
bool vis[maxn];//判断是不是质数
void isprime(ll n)
{
vis[0]=1;
ll cnt=0;//记录质数个数
for(ll i=2;i<=n;i++){
if(!vis[i]){
is_prime[++cnt]=i;
for(ll j=2*i;j<=n;j+=i){
vis[j]=1;//记录质数的倍数是不是质数
}
}
}
for(int i=1;i<=cnt;i++){
cout<<is_prime[i]<<endl;
}
}
//欧拉筛(比埃式筛要快)
void isprime(ll n)
{
vis[0]=1;
ll cnt=0;//记录质数个数
for(ll i=2;i<=n;i++){
if(!vis[i]){
is_prime(++cnt)=i;
if(i<=sqrt(n)){
for(ll j=i*i;j<=n;j+=i){
vis[j]=1;//记录质数的倍数是不是质数
}
}
}
}
for(int i=1;i<=cnt;i++){
cout<<is_prime[i]<<endl;
}
}
//辗转相除法求最大公约数
ll gcd(ll a,ll b)
{
if(b==0)return a;
else return gcd(b,a%b);//return b==0?a:gcd(b,a%b);
}
//求最小公倍数
ll lcm(ll a,ll b)
{
return a*b/gcd(a,b);
}
//裴蜀定理
ax+by=k*gcd(a,b)
//扩展欧几里得算法
void exgcd(ll a,ll b,ll &x,ll &y)//解 ax +by =gcd(a,b)的一组整数解
{
if(b==0)
{
x=1;
y=0;
return;
}
exgcd(b,a%b,x,y);
ll s_x=x;
ll s_y=y;
x=s_y;
y=s_x-(a/b)*s_y;//时间复杂度近似为logn
}
//逆元
//1.扩展欧几里得求逆元
ll inv1(ll a)
{
ll x,y;
exgcd(a,mod,x,y);
return (x%mod+mod)%mod;
}
//2.费马小定理求逆元
ll inv2(ll a)
{
return fastpow(a,mod-2);
}
int main()
{
}
第二个
高精度减法
#include<bits/stdc++.h>
using namespace std;
string x,y;
int a[10005],b[10005],c[10005],la,lb;
int main()
{
cin>>x>>y;
la=x.size();
lb=y.size();
if(la<lb||la==lb&&x<y){
swap(x,y);
swap(la,lb);
cout<<'-';
}
for(int i=0;i<la;i++){
a[la-i]=x[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i]=y[i]-'0';
}
for(int i=1;i<=la;i++){
if(a[i]-b[i]<0){
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
}
while(c[la]==0&&la>1)la--;
for(int i=la;i>=1;i--){
cout<<c[i];
}
return 0;
}
高精度加法
#include <bits/stdc++.h>
using namespace std;
int s1[10000],s2[10000],t[10000];
int main()
{
string x,y;
cin>>x>>y;
int la,lb;
la=x.length();
lb=y.length();
for(int i=0;i<la;i++){
s1[la-i]=x[i]-'0';
}
for(int i=0;i<lb;i++){
s2[lb-i]=y[i]-'0';
}
int lc=max(la,lb);
for(int i=1;i<=lc;i++){
t[i]+=s1[i]+s2[i];
t[i+1]=t[i]/10;
t[i]%=10;
}
if(t[lc+1]>0)lc++;
for(int i=lc;i>=1;i--){
cout<<t[i];
}
return 0;
}
高精度乘法
#include <bits/stdc++.h>
using namespace std;
string x,y;
int a[10005],b[10005],c[10005],la,lb,lc;
int main()
{
cin>>x>>y;
la=x.size();//计算长度
lb=y.size();
for(int i=0;i<la;i++){
a[la-i]=x[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i]=y[i]-'0';
}
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;//重要算法(乘法)
}
}
lc=la+lb;
while(c[lc]==0&&lc>1){
lc--;
}//消零
for(int i=lc;i>=1;i--){
cout<<c[i];
}
return 0;
}
二分求数
#include<stdio.h>
int max(int n,int a[],int len)
{
int ret=-1;
int left=0;
int right=len-1;
int mid=(left+right)/2;
while(right>left){
if(a[mid]==n){
ret=mid;
break;
}else if(a[mid]>n){
right=mid-1;
}else{
left=mid+1;
}
}
return ret;
}
int main()
{
int a[]={12,23,34,45,56,67,78,89,};
int x=max(23,a,sizeof(a)/sizeof(a[0]));
printf("%d",x);
return 0;
}
斐波那契数列
#include <bits/stdc++.h>
using namespace std;
const int MAXN=5005;
int a[MAXN],b[MAXN],c[MAXN],lc=1;
int main()
{
int n;
cin>>n;
a[1]=1;
b[1]=2;
if(n==1){
cout<<1;
return 0;
}
if(n==2){
cout<<2;
return 0;
}
for(int i=3;i<=n;i++){
memset(c,0,sizeof(c));
for(int j=1;j<=lc;j++){
c[j]+=a[j]+b[j];
c[j+1]+=c[j]/10;
c[j]%=10;
}
if(c[lc+1]>0)lc++;
for(int j=1;j<=lc;j++){
a[j]=b[j];
}
for(int j=1;j<=lc;j++){
b[j]=c[j];
}
}
for(int i=lc;i>=1;i--){
cout<<c[i];
}
return 0;
}
结构体数组
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
struct student{
string name;
int age;
int score;
};
struct teacher{
string name;
int age;
struct student s[5];
};
void a(struct teacher stu[],int len){
srand(time(NULL));
int i,j;
string nameseed="ABCDE";
for(i=0;i<len;i++){
int k=rand()%51+20;
stu[i].name="Teacher_";
stu[i].name+=nameseed[i];
stu[i].age=k;
for(j=0;j<5;j++){
stu[i].s[j].name="Student_";
stu[i].s[j].name+=nameseed[j];
int l=rand()%31+10;
stu[i].s[j].age=l;
int x=rand()%61+40;
stu[i].s[j].score=x;
}
}
}
void printinfo(struct teacher stu[],int len){
int i,j;
for(i=0;i<len;i++){
cout<<"老师姓名:"<<stu[i].name
<<" 老师年龄:"<<stu[i].age<<endl;
for(j=0;j<5;j++){
cout<<"\t学生姓名:"<<stu[i].s[j].name<<
" 学生年龄:"<<stu[i].s[j].age<<
" 学生分数:"<<stu[i].s[j].score<<endl;
}
}
}
int main()
{
int len;
struct teacher stu[3];
len=sizeof(stu)/sizeof(stu[0]);
a(stu,len);
printinfo(stu,len);
return 0;
}
找质数
#include <bits/stdc++.h>
using namespace std;
bool isprime(int num){
for(int i=2;i<=sqrt(num);i++){
if(num%i==0) return false;
}
return true;
}
int main() {
int num,x=0,count;
long long sum=0;
cin>>num;
if(num<2) cout<<0<<endl;
if(num==2) cout<<2<<"\n"<<1<<endl;
for(int j=2;j<num;j++){
count=j;
if(sum+count>num){
cout<<x<<endl;
return 0;
}
if(isprime(count)){
cout<<count<<endl;
x++;
sum+=count;
}
}
return 0;
}