第一题:Pseudoprime numbers - POJ 3641 - Virtual Judge
需要用到快速幂(参考c++入门必学算法 快速幂_c++快速幂_旧林墨烟的博客-CSDN博客)
题解:
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
ll p,a;
ll kpow(ll a,ll b){//快速幂
ll ans=1;
while(b){
if(b&1){
ans=ans*a%p;
}
b>>=1;
a=a*a%p;
}
return ans%p;
}
bool Prime(ll x){//判断是否为素数
if(x==2){
return true;
}
for(ll i=2;i<=sqrt(1.0*x);i++){
if(x%i==0){
return false;
}
}
return true;
}
int main()
{
while(cin>>p>>a){
if(p==0&&a==0){
break;
}
if(!Prime(p)&&a==kpow(a,p)){
cout<<"yes"<<endl;
}
else cout<<"no"<<endl;
}
return 0;
}
第二题:Cow Bowling - P
Cow Bowling - P
需要用到dp(参考★动态规划(DP算法)详解_zzc大魔王的博客-CSDN博客)从最底层开始往那个上搜
题解:
#include <iostream>
using namespace std;
typedef long long ll;
int n;
int a[355][355];
int main(){
cin>>n;
for (int i =1; i <=n; ++i)
for (int j=1; j <=i; ++j)
cin>>a[i][j];//存入图
for (int i =n-1; i; i--)//从底层开始向上dp
for (int j=1; j <=i; j++)
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
cout<<a[1][1]<<endl;
return 0;
}