精华内容
下载资源
问答
  • OJ提交通过 问题描述: 正整数 x 的约数是能整除 x 的正...设 a 和 b 是 2 个正整数,a≤b,找出 a 和 b之间约数个数最多的数 x。 编程任务: 对于给定的 2 个正整数 a≤b,编程计算 a 和 b 之间约数个数最多的数。
  • 最多约数问题

    2021-05-23 08:21:17
    设计一个算法求解最多约数问题。输入:由文件名为input.txt的文本文件提供,第一行有两个正整数a和b输出:若找到的a和b之间的约数个数最多的是x,将x的约数及其总数输出到output.txt#include #include void ...

    对于给定的2个随机正整数a<=b,计算a和b之间约数个数最多的数。设计一个算法求解最多约数问题。

    输入:由文件名为input.txt的文本文件提供,第一行有两个正整数a和b

    输出:若找到的a和b之间的约数个数最多的是x,将x的约数及其总数输出到output.txt

    #include

    #include

    void getMaxOfDivisorNumber(int minInteger, int maxInteger);

    void main()

    {

    int integerMin;

    int integerMax;

    FILE* pReadFile = fopen( "E://input.txt", "r" );

    if ( pReadFile == NULL ) {

    printf("Open input file failed!\n");

    return;

    }

    fscanf(pReadFile, "%d %d", &integerMin, &integerMax);

    printf("%d, %d", integerMin, integerMax);

    getMaxOfDivisorNumber(integerMin, integerMax);

    fclose( pReadFile );

    }

    void getMaxOfDivisorNumber(int minInteger, int maxInteger)

    {

    int integer, countVar, i; //integer is between minInteger and maxInteger

    int arraySize;

    int *divisorNumArray;

    int maxDivisorNumber;

    FILE* pWriteFile = fopen("E://output.txt", "w");

    if ( pWriteFile == NULL ) {

    printf("Open output file failed!\n");

    system("pause");

    return;

    }

    // make sure that min integer is not larger than max integer

    if (minInteger > maxInteger) {

    //swap if minInteger > maxInteger

    integer = minInteger;

    minInteger = maxInteger;

    maxInteger = integer;

    }

    arraySize = maxInteger - minInteger + 1;

    divisorNumArray = (int*)malloc(arraySize*sizeof(int)); //dynamic memory allocation

    //store divisor number of every integer into the dynamic array, namely divisorNumArray

    for (integer = minInteger; integer <=maxInteger; integer++) {

    for (i = 1, countVar = 0; i <= integer/2; i++) {

    if (integer % i == 0)

    countVar ++;

    }

    divisorNumArray[integer - minInteger] = countVar + 1;

    }

    //get max divisor number of the dynamic array and write it to output file

    maxDivisorNumber = divisorNumArray[0];

    for (i = 1; i < arraySize ; i++)

    if (maxDivisorNumber < divisorNumArray[i])

    maxDivisorNumber = divisorNumArray[i];

    fprintf(pWriteFile, "Max of divisor number between %d and %d is: %d \n", minInteger, maxInteger, maxDivisorNumber);

    //get all integers that have max divisor number and write it to output file

    fprintf(pWriteFile, "Corresponding integers are:\n");

    for (i = 0; i < arraySize; i++) {

    if (divisorNumArray[i] == maxDivisorNumber)

    fprintf(pWriteFile, "%d\n", i + minInteger);

    }

    free(divisorNumArray);

    fclose(pWriteFile);

    }

    展开全文
  • 解题思路:注意事项:参考代码:#includeusing namespace std;int const MAX = 100005;int prime[MAX];int ma, cnt, l, r;void get_prime(){bool get[MAX];memset(get, true, sizeof(get));get[0] = get[1] = false;...

    解题思路:

    注意事项:

    参考代码:

    #include

    using namespace std;

    int const MAX = 100005;

    int prime[MAX];

    int ma, cnt, l, r;

    void get_prime()

    {

    bool get[MAX];

    memset(get, true, sizeof(get));

    get[0] = get[1] = false;

    for(int i = 2; i <= sqrt(MAX); i++)

    if (get[i])

    for(int j = i * i; j <= MAX; j += i)

    get[j] = false;

    for(int i = 2; i <= MAX; i++)

    if(get[i])

    prime[++cnt] = i;

    }

    void search(int from, int tot, int num, int left, int right)

    {

    ma = tot > ma ? tot : ma;

    if((left == right) && (left > num))

    search(from, tot * 2, num * left, 1, 1);

    for(int i = from; i <= cnt; i++)

    {

    if (prime[i] >right)

    return;

    else

    {

    int j = prime[i], x = left - 1, y = right, n = num, t = tot, m = 1;

    while(true)

    {

    m ++;

    t += tot;

    x /= j;

    y /= j;

    if (x == y)

    break;

    n *= j;

    search(i + 1, t, n, x + 1, y);

    }

    if (tot < (ma / (1 << m)))

    return;

    }

    }

    }

    int main()

    {

    cnt = 0;

    get_prime();

    cin>>l>>r;

    if((l == 1) && (r == 1))

    ma = 1;

    else

    {

    ma = 2;

    search(1, 1, 1, l, r);

    }

    printf("%d\n", ma);

    }

    展开全文
  • C语言:最多约数问题

    2021-04-23 09:19:26
    问题描述: 正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。...程序运行结束时,找到a 和b之间约数个数最多的那个数及最多约数个数。 #includ

    问题描述:

    正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x。

    编程任务:

    对于给定的2个正整数a≤b,编程计算a 和 b 之间约数个数最多的数。

    数据输入:

    输入数据由文件名为input.txt的文本文件提供。文件的第1 行有2 个正整数 a和 b。

    结果输出:

    程序运行结束时,找到a 和b之间约数个数最多的那个数及最多约数个数。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstdlib>
    using namespace std;
    int analy(int a)
    {
    	int yn = 0;
    	for (int i = 1; i <= a; ++i)
    	{
    		if (a % i == 0)
    			++yn;
    	}
    	return yn;
    }
    void swap(int *m, int *n)
    {
    	int t = *m;
    	*m = *n;
    	*n = t;
    }
    int main()
    {
    	int m, n;
    	scanf("%d%d", &m, &n);
    	if (m < n)
    		swap(&m, &n);
    	int max = 0;
    	for (int i = n; i <= m; i++)
    	{
    		int num = analy(i);
    		if (max < num)
    			max = num;
    	};
    	cout << max;
    	return 0;
    }
    
    展开全文
  • 最多约数问题C++

    2020-12-31 10:41:54
    问题描述】正整数X的约数是能整除x的的正整数,正整数x的约数个数记为div(x)。例如,1、2、5、10都是正整数10的约数,且div(10)=4 。设a和b是2个正整数,a<=b,找出a和b之间约数个数最多的数x。 算法设计:对于...

    【问题描述】正整数X的约数是能整除x的的正整数,正整数x的约数个数记为div(x)。例如,1、2、5、10都是正整数10的约数,且div(10)=4 。设a和b是2个正整数,a<=b,找出a和b之间约数个数最多的数x。
    算法设计:对于给定的2个正整数a<=b(a,b的值不超过36),计算a和b之间约数个数最多的数。

    【输入形式】输入数据第一行有2个正整数a和b。中间用#分开。
    【输出形式】输出结果div(x)。
    【样例输入】1 36
    【样例输出】9

    #include<iostream>
    
    using namespace std;
    int div(int num){
        int count=0;
        for(int i=1;i<=num;i++)
        {
            if(num%i==0)
                count++;
    
        }
        return count;
    }
    int main(){
        int a,b,x=0;
        cout<<"请输入a和b的值(a<b):";
        cin>>a>>b;
        if(a<b){
            for(int i=a;i<=b;i++){
    
    
                x=div(i);
            }
           cout<<x<<endl;
        }
        else
            cout<<"输入不符合要求!"<<endl;
    
    
    
    
    }
    
    展开全文
  • 【算法】最多约数问题

    千次阅读 2018-11-25 16:21:00
    最多约数问题 题目描述 正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。例如,1,2,5,10都是正整数10的约数,且div(10)=4。 对于给定的2个正整数a&lt;=b,编程计算a与b之间约数个数最多的数...
  • 问题描述: 正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10...程序运行结束时,找到a 和b之间约数个数最多的那个数及最多约数个数。 测试数据:【只
  • 算法设计与分析: 1-3 最多约数问题

    千次阅读 2018-07-06 14:32:05
    1-3 最多约数问题 问题描述 正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)div(x)div(x)。例如,1,2,5,10都是正整数10的约数,且div(10)=4。 对于给定的2个正整数a&amp;amp;lt;=b,编程...
  • 最多约数问题 正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x及其最多约数个数...
  • 最多约数问题(二)

    2019-10-16 09:28:24
    最多约数问题:正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x及其最多约数个...
  • 问题描述:正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。设a,b是两个正整数,a<=b,找出a和b之间约束个数最多的数x。 代码: #include <stdio.h> int div(int x){ int i,j,y=0; for(i=1;...
  • 最多约数问题 时间限制(普通/Java) : 20000 MS/ 30000 MS 运行内存限制 : 81920 KByte 总提交 : 483 测试通过 : 61  比赛描述  正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。...
  • 算法设计与分析实验 统计数字问题(P6算法实现题1-1) 最多约数问题
  • c最多约数问题

    2021-03-18 19:05:57
    设a 和b 是2 个正整数,且1≤a≤b≤2500000,找出a 和b之间约数个数最多的数x #include<stdio.h> void main() { int a,b,i,j,max=0; int c[2500001]={0}; scanf("%d %d",&a,&b); for(i=1
  • NOJ1203 最多约数问题

    千次阅读 2014-12-17 01:13:16
    * 最多约数问题 * 正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。例如,1,2,5,10都是正整数10的约数,且div(10)=4。 对于给定的2个正整数a,编程计算a与b之间约数个数最多的数。 * a b的范围...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,940
精华内容 3,576
关键字:

最多约数问题