2021计算机考研机试冲刺模拟卷 二
题目链接
A - 幂次方
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod_pow(ll x,ll y,ll mod)
{
ll res=1;
while(y>0)
{
if(y&1)
res=res*x%mod;
x=x*x%mod;//将x平方
y>>=1;//右移
}
return res;
}
int main()
{
ll x,n;
cin>>x>>n;
cout <<mod_pow(x,n,233333)<< endl;
return 0;
}
B - 最大公约数和最小公倍数
#include <iostream>
using namespace std;
int gcd(int a,int b){
if(b==0) return a;
else return gcd(b,a%b);
}
int main()
{
int a,b;
cin>>a>>b;
int g=gcd(a,b);
cout<<g<<' '<<a/g*b<<endl;
return 0;
}
C - 素数判定
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
bool is_Prime(int n)
{
if(n<=1)
return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2; i<=sqr; i++)
{
if(n%i==0)
return false;
}
return true;
}
void tran(int &a,int &b){
if(a>b){
int t=a;
a=b;
b=t;
}
}
int main(){
int a,b;
while(cin>>a>>b){
int ans=0;
tran(a,b);
for(int i=a;i<=b;i++){
if(is_Prime(i))
ans++;
}
cout<<ans<<endl;
}
return 0;
}
D - 质因数个数
#include <bits/stdc++.h>
using namespace std;
const int maxn=100010;
int prime[maxn],pnum;
bool p[maxn]= {0};
void find_prime()
{
for(int i=2; i<maxn; i++)
{
if(p[i]==false)
{
prime[pnum++]=i;
for(int j=2*i; j<maxn; j+=i)
{
p[j]=true;
}
}
}
}
int main()
{
find_prime();
int n;
while(cin>>n)
{
int ans=0;
for(int i=0; i<pnum; i++)
{
while(n%prime[i]==0)//注意这里的while
{
n/=prime[i];
ans++;
}
}
if(n>1)
{
ans++;
}
cout<<ans<<endl;
}
return 0;
}
E - 大整数的因子
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
vector<int> v;//存储因子
for(int i=2; i<=9; i++)
{
string t=s;
int res=0,mod=0;
for(int j=0; j<t.size(); j++)
{
res=mod*10+s[j]-'0';
mod=res%i;
}
if(mod==0) v.push_back(i);
}
if(v.size()==0)
cout<<"none"<<endl;
else{
for(int i=0;i<v.size();i++){
cout<<v[i]<<' ';
}
cout<<endl;
}
}
return 0;
}
F - 大整数加法
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
string add(string a,string b)
{
if(a.size()<b.size())
a.swap(b);//保证是较长的字符串
b.insert(0,a.size()-b.size(),'0');
string result(a.size(),0);
int carry=0;
for(int i=a.size()-1; i>=0; i--)
{
int sum=(a[i]-'0')+(b[i]-'0')+carry;
carry=sum/10;
result[i]=sum%10+'0';
}
if(carry!=0)
result.insert(result.begin(),1,'1');
return result;
}
int main()
{
string a,b;
while(cin>>a>>b)
{
cout<<add(a,b)<<endl;
}
return 0;
}
G - 取模
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod_pow(ll x,ll y,ll mod)
{
ll res=1;
while(y>0)
{
if(y&1)//二进制末尾是1
res=res*x%mod;
x=x*x%mod;//x平方
y>>=1;//右移(相当于除以2)
}
return res;
}
int main()
{
string x;
int n,mod;
while(cin>>x>>n>>mod)
{
ll ans=0;
for(int i=0; i<x.size(); i++)
{
ans=(ans*10%mod+x[i]-'0')%mod;
}
cout<<mod_pow(ans,n,mod)<<endl;
}
return 0;
}
H - 折线分割平面
#include <iostream>
#include <cmath>
using namespace std;
int a[10005];
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
cout<<a[i]*a[i]*2-a[i]+1<<endl;
}
return 0;
}