#include <stdio.h> #define QLEN 100 /************************************************************************/ /* * 正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b, * 需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 * 设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项 //************************************************************************/ //1,2,3...从自然数中筛选,效率不高 //仔细研究即发现其实是从a和b的倍数中删选 ////multipleA = 1,为a的倍数, multipleB = 1为b的倍数, ////选择a*multipleA和b*multiple中小的作为下一个元素,multiple+1, 继续选择 /************************************************************************/ /*我的函数*/ void test1(int a, int b) { int n = 0; int i = (a < b) ? (a) : (b); for(; ;) { if((0 == i % a) || (0 == i % b)) { printf("%d\n", i); n++; } i++; if (n == QLEN) { break; } } } /*算法函数*/ void test2(int a, int b) { int i = 0; int multa = 1; int multb = 1; for(i = 0; i < QLEN; i++) { if(multa * a < multb * b) { printf("%d\n", a * multa); multa++; } else if(multa * a > multb * b) { printf("%d\n", b * multb); multb++; } else { printf("%d\n", b * multb); multa++; multb++; } } } int main() { test1(3, 5); printf("-----------------------------\n"); test2(3, 5); }