1.连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2^31)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
先记住,一个数的因子范围是1~sqrt(n),那么我们就可以通过遍历左端的方式,记录开头和连续因子的长度来记录一个连续因子序列。那么我们只需在遍历的同时更新最大长度即可
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,temp,start=0,len=0;
cin>>n;
for(int i=2;i<sqrt(n)+1;i++){
temp=1;
for(int j=i;temp*j<=n;j++){ //遍历左端
temp*=j;
if(n%temp==0&&j-i+1>len){ //更新最大连续因子序列
len=j-i+1;
start=i;
}
}
}
if(start==0){
cout<<"1"<<"\n"<<n; //如果是0就代表是质数
}
else{
cout<<len<<"\n";
cout<<start;
for(int i=start+1;i<start+len;i++){
cout<<"*"<<i;
}
}
return 0;
}
2.红色警报
战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。
输入格式:
输入在第一行给出两个整数N
(0 < N
≤ 500)和M
(≤ 5000),分别为城市个数(于是默认城市从0到N
-1编号)和连接两城市的通路条数。随后M
行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一个正整数K
和随后的K
个被攻占的城市的编号。
注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。
输出格式:
对每个被攻占的城市,如果它会改变整个国家的连通性,则输出Red Alert: City k is lost!
,其中k
是该城市的编号;否则只输出City k is lost.
即可。如果该国失去了最后一个城市,则增加一行输出Game Over.
。
输入样例:
5 4
0 1
1 3
3 0
0 4
5
1 2 0 4 3
输出样例:
City 1 is lost.
City 2 is lost.
Red Alert: City 0 is lost!
City 4 is lost.
City 3 is lost.
Game Over.
注意:改变连通性并不是一个点的出度为0而已,而是整个图中,原本与其他点联通的地方现在不连通了,变成独立的一块了。