#include <cstdio>
#include <cstring>
int p[101];
void getPrim(int N){ // 打素数表的模板。
int i, j; // 素数最大小于N
memset(p, -1, sizeof (p));
for(i=2; i*i<=N; i++) {
if(p[i]) {
for(j=i*2; j<=N; j+=i)
p[j] = 0;
}
}
p[0] = 0;
for(i=2; i<=N; i++) //1不是素数
if(p[i]) p[++p[0]] = i; //p[0] 为素数个数
}
void initNum(char *str, int *num) {
int i, k; //字符转换为4位数存入num 数组
num[0] = 1; //保存数组中有几位4位数字
num[1] = 0;
for(k=1,i=strlen(str)-1; i>=0; i--,k*=10) {
if(k == 10000){
k = 1;
num[0]++;
num[num[0]] = 0;
}
num[num[0]] += (str[i]-'0') * k;
}
}
void Mul(int *num, int bit) {
int i=1;
__int64 tmp=0;
for (i=1; i<=num[0]; i++) {
tmp += 1ll*num[i] * bit;
num[i] = tmp%10000;
tmp /= 10000;
}
while(tmp) {
num[++num[0]] = tmp%10000;
tmp /= 10000;
}
return;
}
void printNum(int *num) {
//大数输出
printf("%d", num[num[0]]); //第一位先输出
for (int i=num[0]-1; i>=1; i--)
printf("%04d", num[i]); //四位输出不足补零
printf("\n");
}
int Mod(int *num, int mod) {
int ans = 0;
for (int i=num[0]; i>=1; i--)
ans = (1ll*ans*10000+num[i]) % mod;
return ans;
}
int main() {
int i;
//得到小于等于100的素数,并输出
getPrim(100);
for (i=1; i<=p[0]; i++)
printf("%d\n", p[i]);
//大数与整型数相乘,并输出结果
int num[100], k;
char str[100];
scanf("%s%d", str, &k);
initNum(str, num);
Mul(num, k);
printNum(num);
//大数与整型取余并输出结果
scanf("%s%d", str, &k);
initNum(str, num);
printf("%d\n", Mod(num, k));
return 0;
}
收藏于 2011-10-19
来自于百度空间
下午整理的 素数打表 大数与整型相乘 求余模板
最新推荐文章于 2021-05-19 20:56:14 发布