#约数的个数
题目描述
输入n个整数,依次输出每个数的约数的个数
输入描述:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
输出描述:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
这个题主要是要用开平方的方式来降低时间复杂度;假设x=a*a,那个x的两个约数必然是一个小于等于a,另一个大于等于a,所以用开平方的话,时间复杂度最小,如果除以2,那么运行时间会长很多;如果采用两个除数相乘来判断是否为约数(即采用两个for循环嵌套),那么会超出运行时间
利用余数是否为0来判断是否为约数,如果是0,且该除数的平方不等于被除数,那么约数+2,如果等于除数,那么约数+1(两个约数相同只算一个)
c++开平方函数:sqrt(x) (x为被开平方的数字),开平方未必就是整数,如果比较的对象是整数,可以进行强制类型转换,即int(sqrt(x))
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a,b[1000];
for(int i=0;i<n;i++)
{
int count=0;
cin>>a;
for(int j=1;j<=int(sqrt(a));j++)
{
if(a%j==0&&j*j!=a)
{

这是一个包含两部分的编程问题。首先,对于给定的n个整数,使用C++计算并输出每个数的约数个数,通过开平方优化算法以降低时间复杂度。然后,接收任意4个字符并反序输出。问题要求对约数计数优化,以及理解C++中字符串反序操作。
最低0.47元/天 解锁文章
3370

被折叠的 条评论
为什么被折叠?



