腾讯研发笔试C++编程题(伪题解)
/*给出n 求最小的正整数m 使得LCM(1...m)==LCM(n+1...m)*/
/*推结论的题 直接是求小于等于n的素数次方数*2*/
#include<bits/stdc++.h>
using namespace std;
int isp[1001000];
int main()
{
int ans = 1;
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
if(isp[i]==0)
{
ans = max(ans,i);
for(int j=i*i;j<=n;j+=i){
isp[j]=1;
}
long long tmp = i;
tmp*=i;
while(tmp<=n)
{
ans = max(ans,static_cast<int>(tmp));
tmp*=i;
}
}
}
cout<<ans*2<<endl; return 0;
}
单向有环图,求所有要求点(图上到达该点的点个数>图上该点可达的点个数)的数目
/*只过了90的点 10的点超时了*/
#include<bits/stdc++.h>
using namespace std;
vector<int>mp[1100];
int n,m;
int vis[1100];
int in[1100];
int out[1100];
int mk[1100][1100];
int ok[1100];
int dfs(int st)
{
int cnt = 1;
if(!ok[st]){
in[st]++;
ok[st]=1;
}
for(auto i:mp[st]){
if(vis[i] == false)
{
vis[i] = true;
cnt+=dfs(i);
vis[i] = false;
}
}
return cnt ;
}
int main()
{
cin>>n>>m;
int x,y;
for(int i=0;i<m;i++)
{
cin>>x>>y;
if(mk[x][y]==0&&x!=y){
mk[x][y] = 1;
mp[x].push_back(y);
}
}
for(int i=1;i<=n;i++)
{
memset(ok,0,sizeof(ok));
vis[i] = true;
out[i]=dfs(i);
vis[i] = false;
}
int ans = 0;
for(int i=1;i<=n;i++) ans+=in[i]>out[i];
cout<<ans<<endl; return 0;
}
求A的倍数%B==C
/*数据范围小暴力验证即可 最小验证100倍即可 欢迎大佬指点更好的解法*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
char* p = "NO";
for(int i=1;i<=1000;i++){
if(a*i%b==c){
p="YES";
}
}
cout<<p<<endl;
} return 0;
}